【问题标题】:Assembly parenthesis explanation汇编括号解释
【发布时间】:2014-05-06 17:07:31
【问题描述】:

您好,我正在查看可执行文件,但无权访问源代码。我以前没有真正遇到过这个,我在网上找到的和我得到的数据不匹配。代码:

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

我的困惑在于 +52 行。 "x/d $ecx" 产生 2,在调用该行之前 %esi 的值是 7。在该行执行之后 %edx 设置为等于 3(之前是零)。

我以为是 2 + (7*4),但事实并非如此。有人可以启发我。我相信这是 AT&T 语法。

【问题讨论】:

  • 这也是一个循环结构,我不知道这是否会改变什么。

标签: linux assembly x86 32-bit


【解决方案1】:

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

【讨论】:

  • 我现在明白了, %ecx 实际上指向一个数组的开头,而那一行只是告诉它要走多远的数组。谢谢。
猜你喜欢
  • 2014-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多