为什么不能从 EBP 寄存器中调用指针地址?我的意思是在下面的代码模式中演示。
- 操作码:'0xFF 0x10' -> CALL DWORD PTR DS:[EAX]
- 操作码:'0xFF 0x11' -> CALL DWORD PTR DS:[ECX]
- 操作码:'0xFF 0x12' -> CALL DWORD PTR DS:[EDX]
- 操作码:'0xFF 0x13' -> CALL DWORD PTR DS:[EBX]
- 操作码:'0xFF 0x14' -> CALL DWORD PTR SS:[ESP+EDI]
- 操作码:'0xFF 0x15 0x012345678' -> CALL DWORD PTR DS:[0x012345678]
- 操作码:'0xFF 0x16' -> CALL DWORD PTR DS:[ESI]
- 操作码:'0xFF 0x16' -> CALL DWORD PTR DS:[EDI]
“5”在“Intel Instruct manual”中有说明,但从未直接提及“6”,也从未明确指出您不能从 EBP 寄存器中调用它。我知道这不是一个无用的功能,但我想知道为什么英特尔选择这两个寄存器来使用,这只是一个设计选择还是我缺少的东西?(我有一个猜测,但我很好奇真正的原因是什么。)