【发布时间】:2017-01-03 14:29:16
【问题描述】:
(1) 下面的代码是什么意思?我在网上的任何地方都找不到关于 ds:[ ] 语法的任何参考资料。和没有 ds: 有什么不同?
cmp eax,dword ptr ds:[12B656Ch]
(2) 在下面的指令中,
movsx eax,word ptr [esi+24h]
esi 寄存器是做什么用的?使用这么稀有的寄存器,能猜出原来的 C 代码在做什么吗?
【问题讨论】:
-
与没有 ds: 有何不同?。不是,您的反汇编程序只是冗长。
-
@cr001:(1)是的;除非有特定的段覆盖,默认情况下
mov中的地址和大多数其他指令都相对于 DS 段(值得注意的例外:字符串指令 - 使用 ES;代码地址,相对于 CS 获取;但鉴于 CS, DS 和 ES 在“正常” 32 位进程中默认设置为零,这些细节通常可以忽略)。 -
致何塞·罗德里格斯:非常感谢。这就是我想知道的事情。我将尝试查看该地址处的数据是否与程序中任何明显的数组或字符串数据匹配。
-
@cr001: (2) ESI 是“特殊的”,因为它可以用于“字符串指令”(寻找
rep、lodsb、stosb和类似的指令),但通常也用作普通的通用寄存器。它是跨函数调用保留的寄存器之一,因此当值必须“生存”几个函数调用而不将其溢出到堆栈上时,可以使用它(因此,它可以用于当前函数中的长期变量)。 -
这就是我想知道的事情。。 我认为stackoverflow.com/questions/38843403/… 会是一个更好的重复目标,那么。我会重新打开,但其他人将不得不重新关闭。显然我无法重新关闭它。