为什么反汇编代码中有一些“无意义”的内存插槽?

时间:2013-12-21 21:03:03

标签: linux memory-management assembly disassembly memory-alignment

我使用objdump在32位Linux上反汇编一些ELF文件。

asm文件采用Intel格式。

在反汇编文件中,我注意到一些内存插槽如下:

80483ed:       c7 44 24 18 07 00 00    mov    DWORD PTR [esp+0x18],0x7
80483f4:       00
80483f5:       c7 44 24 1c 0c 00 00    mov    DWORD PTR [esp+0x1c],0xc
80483fc:       00
80483fd:       c7 44 24 20 01 00 00    mov    DWORD PTR [esp+0x20],0x1
8048404:       00
8048405:       c7 44 24 24 fe ff ff    mov    DWORD PTR [esp+0x24],0xfffffffe
804840c:       ff

并且原始汇编文件是:

mov     DWORD PTR [esp+24], 7
mov     DWORD PTR [esp+28], 12
mov     DWORD PTR [esp+32], 1
mov     DWORD PTR [esp+36], -2

有人能告诉我内存地址如“80483f4”,“80483fc”吗?

此问题是否与内存对齐有关?

谢谢!

1 个答案:

答案 0 :(得分:5)

这些是前一行操作数的一部分。 “立即”(常数)数字被编码为32位。所以0x07占用4个字节:07 00 00 00。无论您使用什么禁用,都会向您显示不同行上的最后一个字节。