LLVM程序分析日记之def与use

1. def-use chain 以及 use-def chain

See https://llvm.org/docs/ProgrammersManual.html#iterating-over-def-use-use-def-chains
其中,前者可以很方便得获取函数得所有caller instructions

2. 回溯指令操作数的来源

有时我们需要处理某条指令的操作数来自之前操作的情况(例如,来自函数调用的返回值)。得益于LLVM IR基于的静态单赋值SSA形式,实现这一功能非常简单。例如:

if (strcmp(buf, magic_bytes)) {
      /* ... */
}

上述代码片段会生成如下LLVM IR:

%49 = call i32 @strcmp(...)
%50 = icmp neq i32 %49, 0
...

对于ICMP指令,我们想要回溯其操作数的来源,只需要将指向该操作数(即,%49)的Value*指针进行dyn_cast<llvm::Instruction*>类型转化,转化为llvm::Instruction*类型的指针,若不为空,即得到该条调用strcmp的函数调用指令。

posted @ 2021-01-07 20:47  bjchan9an  阅读(1528)  评论(0)    收藏  举报