我开始使用 LLVM 进行编程,并尝试执行一个位码。我想出了这段代码,改编自旧示例(我的疑问是在创建MemoryBuffer
,getFile(string)
不再存在):
string *errorString = new string;
LLVMContext context;
OwningPtr<MemoryBuffer> *mb = new OwningPtr<MemoryBuffer>;
MemoryBuffer::getFileOrSTDIN(argv[1], *mb);
Module *m = ParseBitcodeFile(mb->take(), context, errorString);
ExecutionEngine *ee = EngineBuilder(m).create();
Function *main = m->getFunction("main");
从这条线没有任何作用(分段错误)
1 - “标准”方法?
void * f = ee->getPointerToFunction(main);
void (*FP)() = (void (*)()) f;
2 - lli 的方法,不确定 envp 的“0”
vector<string> *argList = new vector<string>;
ee->runFunctionAsMain(main, *argList, 0);
3 - 2 的概括。
vector<struct GenericValue> *argList = new vector<struct GenericValue>;
ee->runFunction(main, *argList);