1

对于程序分析工具,我需要识别所有类型的 MOV 操作(Register->Register、Memory->Register、Register->Memory)。我能够识别 Memory->Register,但其他的却失败了。

另一个问题是间接内存操作数。我需要以某种方式识别它们。我知道 PIN 能够检查我们是否有内存读取/内存写入。但是间接内存访问是例如 MOV eax [ebx],不是吗?我该如何处理它们?在这个例子中我需要 ebx 的内容。

干杯

4

1 回答 1

2

使用 INS_OperandMemoryBaseReg 等。我希望您熟悉在 x86 上寻址内存操作数的复杂方式。如果没有,请先阅读 Intel 手册,或者阅读例如this的快速摘要。您可以使用 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() 中的代码应该可以帮助您入门。

于 2014-07-13T15:00:07.183 回答