装配括号解释

时间:2014-05-06 17:07:32

标签: linux assembly x86 32-bit

您好我正在查看可执行文件但无法访问源代码。我之前没有真正遇到这个问题,而且我在网上找到的信息与我得到的数据并不匹配。代码:

0x08048d4c <+45>:   movsbl (%ebx,%eax,1),%esi
0x08048d50 <+49>:   and    $0xf,%esi
0x08048d53 <+52>:   add    (%ecx,%esi,4),%edx

我的困惑是在+52线。 &#34; x / d $ ecx&#34;产生2,并且在调用该行之前%esi处的值为7.执行该行之后%edx设置为等于3(手前为零)。

我认为这将是2 +(7 * 4),但事实并非如此。有人可以赐教。这是我认为的AT&amp; T语法。

1 个答案:

答案 0 :(得分:2)

是的,它是&amp; t语法,如果你对它感到困惑,那么将gdb切换到intel语法(set disassembly-flavor intel)。你会看到类似的东西:add edx, [ecx + esi*4] 无论如何,这从地址ecx + esi*4中取出内存中的操作数。您可以看到使用x/d $ecx+$esi*4的内容。 x/d $ecx对您没有任何帮助,因为添加的是地址,而不是值。