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的函数调用指令。

浙公网安备 33010602011771号