在x86中,我了解到多字节对象存储在内存中的方式是小端的。
现在一般来说,当涉及到CPU指令时,OPCODE确定指令的用途,数据/存储器地址可以跟随其编码格式的操作码。我的理解是,指令的操作码部分应该是最高有效字节,因此出现在任何给定指令编码表示的最高地址。
有人能解释一下这个x86 linux gdb示例中的内存布局吗?我可以想象操作码0xb8会出现在更高的地址,因为它是最重要的字节。
(gdb) disassemble _start
Dump of assembler code for function _start:
0x08048080 <+0>: mov e
我一直被告知,获取下一条指令(当没有跳转或诸如此类的东西)时,它会增加4,但这是否意味着指令仅限于有3个参数?
我是否正确地认为这个程序在记忆中是这样的:
0: LOAD
1: eax
2: 0x30
3: <zeroed out because the next instruction has to be at 4>
4: LOAD
5: ebx
6: 0x34
7: <zeroed out because the next instruction has to be at 8>
8: ADD
9: ecx
10: eax
11: ebx
12: <Next i