Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
X86 使用英特尔管脚提取操作数副本_X86_Intel Pin - Fatal编程技术网

X86 使用英特尔管脚提取操作数副本

X86 使用英特尔管脚提取操作数副本,x86,intel-pin,X86,Intel Pin,我是intel pin的新手,我正在尝试对二进制文件进行一点宽度分析。 我试图分析每条汇编指令中用于操作数的确切位数。 例如,如果存储了一个无符号整数15,那么4位就足够了。 为此,我需要得到一个操作数的副本。是否有任何方法可以使用intel pin api执行此操作。关于内存操作数,您可以使用INS_IsMemoryRead和INS_IsMemoryWrite查看指令是否访问内存,然后根据内存操作数的数量对其进行指令插入(可能有多个操作数,因为某些指令隐式访问内存)。查看IARG_MEMORY

我是intel pin的新手,我正在尝试对二进制文件进行一点宽度分析。
我试图分析每条汇编指令中用于操作数的确切位数。
例如,如果存储了一个无符号整数15,那么4位就足够了。

为此,我需要得到一个操作数的副本。是否有任何方法可以使用intel pin api执行此操作。

关于内存操作数,您可以使用INS_IsMemoryRead和INS_IsMemoryWrite查看指令是否访问内存,然后根据内存操作数的数量对其进行指令插入(可能有多个操作数,因为某些指令隐式访问内存)。查看IARG_MEMORYREAD_EA和friends,获取分析函数中的内存读写值


要查看实际寄存器中的值,您可以使用IARG_REG_VALUE。

我找到了INS_operator immediate(INS,I)方法来提取立即操作数,但找不到任何显式方法来提取寄存器和内存操作数。64位寄存器如何?IARG_REG_值是ADDRINT-limited。在具有64位寄存器的英特尔体系结构中,ADDRINT是64位的,不是吗?是的。事实证明,我错误地使用了TARGET_IA32而不是TARGET_IA32E,这导致ADDRINT即使在x64 visual studio配置下也被声明为UINT32。在注意到之前,用IARG_REG_引用重写了我的小代码。