Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <vector>
- #include <dyninst/Event.h>
- #include <dyninst/local_var.h>
- using namespace ProcControlAPI;
- struct s_t
- {
- long int a;
- int* b;
- };
- bool bp_reached = false;
- Process::cb_ret_t on_breakpoint(Event::const_ptr e) {
- bp_reached = true;
- return Process::cbDefault;
- }
- int main(const int argc, const char * argv[]) {
- // find symbol "foo"
- Symtab *symtab = nullptr;
- Symtab::openFile(symtab, "struct");
- std::vector<Function *> functions;
- symtab->findFunctionsByName(functions, "foo");
- Function *f_foo = functions[0];
- // create process
- std::vector<std::string> new_argv;
- Process::ptr process = Process::createProcess("struct", new_argv);
- // insert breakpoint and callback
- Breakpoint::ptr breakpoint = Breakpoint::newBreakpoint();
- process->addBreakpoint(f_foo->getOffset(), breakpoint);
- Process::registerEventCallback(EventType::Breakpoint, on_breakpoint);
- // run process
- process->continueProc();
- // wait for breakpoint
- while (!process->isTerminated() and !bp_reached) {
- Process::handleEvents(true);
- }
- // print some informations
- {
- Walker *walker = Walker::newWalker(process);
- // stack trace
- std::cout << "\nstack from bottom to top:\n";
- std::vector<Frame> frames;
- std::string name;
- walker->walkStack(frames);
- for (auto frame : frames) {
- frame.getName(name);
- std::cout << '\t' << name << "\tFP: " << frame.getFP() << "\tSP: " << frame.getSP() << '\n';
- }
- // parameters
- std::cout << "\nparameters:\n";
- std::vector<localVar *> parameters;
- f_foo->getParams(parameters);
- for (auto param : parameters) {
- std::cout << '\t' << param->getName() << ": " << param->getType()->getName() << " -- "
- << param->getType()->getSize() << " Bytes\n";
- std::cout << "\t --> Setting size to 0\n";
- param->getType()->setSize(0);
- std::cout << '\t' << param->getName() << ": " << param->getType()->getName() << " -- "
- << param->getType()->getSize() << " Bytes\n";
- }
- }
- // continue
- process->continueProc();
- // wait for exit
- Process::handleEvents(true);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment