为什么OllyDbg中的cpu寄存器不按字母顺序排序?

时间:2011-02-21 02:32:47

标签: assembly cpu-registers ollydbg

在OllyDbg中,寄存器窗口列出了标准的cpu寄存器:

EAX
ECX
EDX
EBX

为什么EBX最后显示有特殊原因?

4 个答案:

答案 0 :(得分:7)

这可能与它们在处理器指令中以这种方式排序的原因相同。当指定32位寄存器时,eax为0,ecx为1,edx为2,ebx为3,esp为4,ebp为5,esi为6,edi为7.英特尔自启动X86后使用此命令架构。

答案 1 :(得分:2)

我的猜测是因为EAX,ECX和EDX被cdecl,stdcall和其他calling conventions中的函数用作临时寄存器,即它们在函数调用后不会被保留。除了剩余的寄存器之外,特殊用途是指针Intel Developer Manual (2.36MB PDF)中记录的指针。那只是我的两分钱。

答案 2 :(得分:1)

由于我多年来一直使用ollydbg进行逆向工程,我可以告诉你,调试时这是重要的顺序。 Eax因其性质而无处不在。它获得了返回值,它被大量使用。然后,我会说ecx和edx是相同的。循环,repsb等指令使用ecx,而div,muls等使用edx。而且,当我们在汇编中编程时,我们倾向于使用eax,edx和ecx。有时使用Esi和edi,主要是在重复字符串函数中或在某些情况下作为辅助寄存器。

我认为订单背后的原因实际上是英特尔使用订单的方式,但是在我的ollydebug寄存器上安装esi会非常奇怪,因为eax到处使用。因此,它也具有人体工程学点:D

答案 3 :(得分:0)

PUSHAD是让我对这个问题有更多见解的指示。它将EAX,ECX,EDX,EBX,原始ESP,EBP,ESI和EDI的值推送到堆栈。这很可能是OllyDbg在寄存器视图中按顺序对它们进行排序的原因。可以找到PUSHAD的说明here

相关问题