LLVM查找分配内存的每条指令

时间:2016-09-10 18:33:40

标签: c++ llvm

我想找到在LLVM IR中分配内存的每条指令。对于堆栈分配,我只是这样做:

Instruction* I;      

if (AllocaInst* AI = dyn_cast<AllocaInst>(I)) {
    //stack allocation
}

但是堆和静态(全局)分配呢? 还有什么可以在LLVM IR中分配内存?

如果LLVM版本有所不同,请提供您所指的版本。

2 个答案:

答案 0 :(得分:2)

最终,你无法完美地发现这一点。堆分配归结为操作系统调用,有人可以使用内联汇编直接进行这些调用。还有一些您已赢得的图书馆电话,但这些图书馆电话已被链接。

请记住您正在处理的任何事情。

答案 1 :(得分:0)

内存分配可以是堆栈和堆。对于堆栈分配,您正在做的是正确的,您需要检查alloca指令。堆分配是通过malloc函数调用完成的,没有明确的IR指令。

我不做任何实验,但可能是你可以试试的方式。

    if(MemSetIntrinsic *MSI = dyn_cast<MemSetIntrinsic>(I))
           // This call instruction is a memory allocating instruciton