对于程序分析工具,我需要识别所有类型的MOV操作(寄存器 - >寄存器,存储器 - >寄存器,寄存器 - >存储器)。我能够识别Memory-> Register,但其他的则没能。
另一个问题是间接内存操作数。我需要以某种方式识别它们。我知道PIN能够检查我们是否有内存读/写内存。但间接存储器访问例如是MOV eax [ebx],不是吗?我怎么处理它们?在这个例子中我需要ebx的内容。
干杯
答案 0 :(得分:2)
使用INS_OperandMemoryBaseReg等。我希望您熟悉在x86上解决内存操作数的复杂方法。如果没有,请先阅读英特尔手册或快速查看http://www.supernovah.com/Tutorials/Assembly3.php。您可以使用INS_OperandMemoryIndexReg,INS_OperandMemoryScale,INS_OperandMemoryDisplacement等获取[eax + ebx * 2 + 25]之类的其他部分。
来自http://devilheart.googlecode.com/svn-history/r80/trunk/devilheart/project_pin/devilheart/ins_handler.cpp的movRMHandler()中的代码可以帮助您入门。