【发布时间】:2012-05-16 03:02:14
【问题描述】:
当我阅读一些反汇编代码时,由于我不了解 AT&T 语法,我不知道 (%esp,1) 之类的代码是什么意思。
11 printf("%x", a);
0x401386 <main+182>: movl $0x1,0x4(%esp,1)
0x40138e <main+190>: movl $0x40300d,(%esp,1)
0x401395 <main+197>: call 0x401810 <printf>
有人能说出这是什么意思吗?谢谢!
【问题讨论】:
-
0x4(%esp,1)与 Intel 语法中的[esp*1 + 0x4]相同。 -
但是……好像[esp+ 0x4*1]比较常见? ——对不起我的英语不好。 0x4(%esp,2) 好像没什么实际意义?
-
常见的是
[esp+eax*4+16](其中eax是位于esp+16的32 位整数数组的索引)。这就是寻址模式中存在“规模”的原因。 -
"比较常见?"比较常见的是odes note matter。 您使用的工具很重要。
-
另请参阅AT&T syntax tag wiki,了解有关语法的更多详细信息,以及指向更多文档的链接。