【发布时间】:2018-05-16 05:45:40
【问题描述】:
我使用的是 llvm 4.0。我需要挂钩一个函数,其中参数是 IR 中的局部变量之一,例如我想将 %10 值传递给函数。 我知道如何挂钩一个函数。以下是我的代码:
hookFunc2 = M.getOrInsertFunction("funcName", Type::getVoidTy(M.getContext()),Type::getInt8PtrTy(M.getContext()),NULL);
hook1= cast<Function>(hookFunc2);
IRBuilder <> builder1(a); //where a is the basic block pointer
BasicBlock::iterator BC = a->begin();
builder1.SetInsertPoint(&(*BC));
Value* args = builder1.CreateGlobalStringPtr(%10); //this is wrong.what should be here instead of %10? I want %10 value.
builder1.CreateCall(hook1, args)
【问题讨论】:
-
您需要以某种方式获取该变量的引用。你能显示定义
%10的代码吗? -
%10 = getelementptr inbounds [10000 x i8], [10000 x i8]* %line, i32 0, i32 0 %11 = 加载 %struct._IO_FILE*, %struct._IO_FILE** % fp, align 8 %12 = call i8* @fgets(i8* %10, i32 10000, %struct._IO_FILE* %11)