您好我正在查看可执行文件但无法访问源代码。我之前没有真正遇到这个问题,而且我在网上找到的信息与我得到的数据并不匹配。代码:
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语法。
答案 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
对您没有任何帮助,因为添加的是地址,而不是值。