Intel x86内存机器码布局:首条OR指令立即数字节序疑问
x86小端字节序下立即数的转换问题
给定内存中的机器码布局(每行对应4个连续内存地址,左侧为起始地址):
0x421a0770: 0D 00 3D 77 0x421a0774: AC 3D 11 2A 0x421a0778: 96 AB 77 04 0x421a077c: 90 2D 0D AB 0x421a0780: C3 77 2C C3
首条指令分析
- 首条指令的opcode为
0D,对应Intel语法的OR eax, imm32指令,该指令需紧跟4字节的32位立即数。 - x86架构采用小端字节序:多字节数据的最低有效字节(LSB)存储在最低内存地址,最高有效字节(MSB)存储在最高内存地址。
立即数字节拆解
opcode 0D位于地址0x421a0770,后续4字节立即数的内存地址及对应字节为:
- 0x421a0771: 00(立即数的LSB)
- 0x421a0772: 3D
- 0x421a0773: 77
- 0x421a0774: AC(立即数的MSB)
按照小端字节序规则,将这4个字节按内存地址从高到低的顺序组合,得到完整的32位立即数:0xAC773D00,对应选项2。
困惑解答
你之前误以为内存每行左侧是最高有效字节,实际每行左侧是该段内存的起始地址,字节按地址递增顺序排列(从左到右地址依次+1)。首条指令的4字节立即数跨越了两行内存:前3个字节在0x421a0770行的后三位,第4个字节在0x421a0774行的第一位,它们是连续的内存地址(0x421a0771 → 0x421a0772 → 0x421a0773 → 0x421a0774),属于相邻的有效字节。
内容的提问来源于stack exchange,提问作者Fsociety
相关产品推荐
相关产品推荐

