【发布时间】:2011-06-04 10:10:47
【问题描述】:
为什么不能从 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 手册”中有说明,但从未直接提及“6”,也从未明确声明您不能从 EBP 寄存器中调用它。我知道这不是一个无用的功能,但我想知道为什么英特尔选择这两个寄存器来使用,这只是一个设计选择还是我缺少的东西? (我有一个猜测,但我很好奇真正的原因是什么。)
【问题讨论】: