32位程序的汇编指令长度

问题描述 投票:0回答:1

i构建一个简单的程序,并使用file命令检查程序是否为32位格式。反过来,我使用objdump来反汇编程序,发现某些汇编指令长度大于4字节。

我希望程序是32位格式。因此,这些汇编指令的长度不应大于4字节。显然,我错了。您能告诉我为什么有6字节或7字节的汇编指令吗?谢谢。

$ file a.out
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=09aa196a671a6e169f09984360133ad9488f7e53, not stripped
$ objdump -d a.out
a.out:     file format elf32-i386

Disassembly of section .init:

 080482a8 <_init>:
 80482a8:       53                      push   %ebx
 80482a9:       83 ec 08                sub    $0x8,%esp
 80482ac:       e8 8f 00 00 00          call   8048340 <__x86.get_pc_thunk.bx>
 80482b1:       81 c3 4f 1d 00 00       add    $0x1d4f,%ebx
 80482b7:       8b 83 fc ff ff ff       mov    -0x4(%ebx),%eax
 80482bd:       85 c0                   test   %eax,%eax
 80482bf:       74 05                   je     80482c6 <_init+0x1e>
 80482c1:       e8 3a 00 00 00          call   8048300 <__libc_start_main@plt+0x10>
 80482c6:       83 c4 08                add    $0x8,%esp
 80482c9:       5b                      pop    %ebx
 80482ca:       c3                      ret
assembly x86 disassembly
1个回答
0
投票

指令长度不限于32位。从x86维基百科页面:

x86体系结构是可变的指令长度,主要是“ CISC”设计。

编码变量(1到15字节)

并且来自Intel® 64 and IA-32 architectures software developer’s manual

Intel386处理器将指令长度限制为15个字节。

© www.soinside.com 2019 - 2024. All rights reserved.