本文整理汇总了C++中Proc::isLib方法的典型用法代码示例。如果您正苦于以下问题:C++ Proc::isLib方法的具体用法?C++ Proc::isLib怎么用?C++ Proc::isLib使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Proc
的用法示例。
在下文中一共展示了Proc::isLib方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: decode
// Somehow, a == NO_ADDRESS has come to mean decode anything not already decoded
void FrontEnd::decode(Prog *prog, ADDRESS a) {
if (a != NO_ADDRESS) {
std::cout<<"decode main at a!= NOADDRESS\n";
prog->setNewProc(a);
if (VERBOSE)
LOG << "starting decode at address " << a << "\n";
UserProc* p = (UserProc*)prog->findProc(a);
if (p == NULL) {
if (VERBOSE)
LOG << "no proc found at address " << a << "\n";
return;
}
if (p->isLib()) {
LOG << "NOT decoding library proc at address 0x" << a << "\n";
return;
}
std::ofstream os;
PROGMAP::const_iterator it;
for (Proc *pProc = prog->getFirstProc(it); pProc != NULL; pProc = prog->getNextProc(it)) {
std::cout<<"Proc name Before main "<<pProc->getName()<<"\n";
}
processProc(a, p, os);
for (Proc *pProc = prog->getFirstProc(it); pProc != NULL; pProc = prog->getNextProc(it)) {
std::cout<<"Proc name After decode main "<<pProc->getName()<<"\n";
}
p->setDecoded();
} else { // a == NO_ADDRESS
std::cout<<"decode child proc\n";
bool change = true;
while (change) {
change = false;
PROGMAP::const_iterator it;
for (Proc *pProc = prog->getFirstProc(it); pProc != NULL; pProc = prog->getNextProc(it)) {
if (pProc->isLib()) continue;
UserProc *p = (UserProc*)pProc;
if (p->isDecoded()) continue;
// undecoded userproc.. decode it
change = true;
std::ofstream os;
std::cout<<"Signature Before :"<<p->getSignature()->prints()<<"\n";
int res = processProc(p->getNativeAddress(), p, os);
std::cout<<"Signature After :"<<p->getSignature()->prints()<<"\n";
//std::cout<<"Sig type:"<<p->getSignature()->prints()<<"\n";
std::cout<<"process Proc finish< res:"<<res<<"\n";
if (res == 1)
p->setDecoded();
else
break;
// Break out of the loops if not decoding children
if (Boomerang::get()->noDecodeChildren)
break;
}
if (Boomerang::get()->noDecodeChildren)
break;
}
}
prog->wellForm();
}
示例2: parseCmd
/**
* Parse and execute a command supplied in interactive mode.
*
* \param argc The number of arguments.
* \param argv Pointers to the arguments.
*
* \return A value indicating what happened.
*
* \retval 0 Success
* \retval 1 Faillure
* \retval 2 The user exited with \a quit or \a exit
*/
int Boomerang::parseCmd(int argc, const char **argv)
{
static Prog *prog = NULL;
if (!strcmp(argv[0], "decode")) {
if (argc <= 1) {
std::cerr << "not enough arguments for cmd\n";
return 1;
}
const char *fname = argv[1];
Prog *p = loadAndDecode(fname);
if (p == NULL) {
std::cerr << "failed to load " << fname << "\n";
return 1;
}
prog = p;
#if USE_XML
} else if (!strcmp(argv[0], "load")) {
if (argc <= 1) {
std::cerr << "not enough arguments for cmd\n";
return 1;
}
const char *fname = argv[1];
XMLProgParser *p = new XMLProgParser();
Prog *pr = p->parse(fname);
if (pr == NULL) {
// try guessing
pr = p->parse((outputPath + fname + "/" + fname + ".xml").c_str());
if (pr == NULL) {
std::cerr << "failed to read xml " << fname << "\n";
return 1;
}
}
prog = pr;
} else if (!strcmp(argv[0], "save")) {
if (prog == NULL) {
std::cerr << "need to load or decode before save!\n";
return 1;
}
XMLProgParser *p = new XMLProgParser();
p->persistToXML(prog);
#endif
} else if (!strcmp(argv[0], "decompile")) {
if (argc > 1) {
Proc *proc = prog->findProc(argv[1]);
if (proc == NULL) {
std::cerr << "cannot find proc " << argv[1] << "\n";
return 1;
}
if (proc->isLib()) {
std::cerr << "cannot decompile a lib proc\n";
return 1;
}
int indent = 0;
((UserProc*)proc)->decompile(new ProcList, indent);
} else {
prog->decompile();
}
} else if (!strcmp(argv[0], "codegen")) {
if (argc > 1 ) {
Cluster *cluster = prog->findCluster(argv[1]);
if (cluster == NULL) {
std::cerr << "cannot find cluster " << argv[1] << "\n";
return 1;
}
prog->generateCode(cluster);
} else {
prog->generateCode();
}
} else if (!strcmp(argv[0], "move")) {
if (argc <= 1) {
std::cerr << "not enough arguments for cmd\n";
return 1;
}
if (!strcmp(argv[1], "proc")) {
if (argc <= 3) {
std::cerr << "not enough arguments for cmd\n";
return 1;
}
Proc *proc = prog->findProc(argv[2]);
if (proc == NULL) {
std::cerr << "cannot find proc " << argv[2] << "\n";
return 1;
}
Cluster *cluster = prog->findCluster(argv[3]);
if (cluster == NULL) {
std::cerr << "cannot find cluster " << argv[3] << "\n";
//.........这里部分代码省略.........