当前位置 : 主页 > 编程语言 > delphi >

delphi – 如何解释CPU窗口的反汇编窗格的列?

来源:互联网 收集:自由互联 发布时间:2021-06-23
有一个名为CPU窗口的工具,我按下Ctrl Alt C,显示我的代码的反汇编. 内存地址左侧的绿色箭头表示当前执行点的位置,然后是内存地址,但第二列的含义是什么,为什么编译器有时会在指令后
有一个名为CPU窗口的工具,我按下Ctrl Alt C,显示我的代码的反汇编.

内存地址左侧的绿色箭头表示当前执行点的位置,然后是内存地址,但第二列的含义是什么,为什么编译器有时会在指令后跳转多个地址?

例如:

|first column|second column|assembly|
004520F4 55             push ebp      //continuous 
004520F5 8BEC           mov ebp, esp  //jumps to F7
004520F7 6A00           push $00      //jumps to F9
004520F9 53             push ebx      //continuous
004520FA 33D2           xor edx,edx
我们来看看代码:

004520F4 55             push ebp      
004520F5 8BEC           mov ebp, esp  
004520F7 6A00           push $00      
004520F9 53             push ebx      
004520FA 33D2           xor edx,edx

这里的每一行代表一个机器指令.提供的信息如下:

>第一列是指令开始的地址,以十六进制显示.
>第二列是指令的机器代码,以十六进制显示.
>第三列是反汇编语言的指令.

所以第二列和第三列代表完全相同的信息.提供第三列是为了使代码更容易理解.

请注意,不同的指令有不同的长度.第一条和第四条指令只有一个字节长.其他的是两个字节长.这就解释了为什么指令地址在两个字节指令之后增加了超过一个字节.

有些指令可能需要超过两个字节,所以你可以增加3,4等等这些指令.一个很好的例子是对目标地址或偏移进行编码的调用或跳转指令.因此,32位机器上的绝对跳转可能以5个字节编码,一个用于操作码,四个用于地址.

回到过去的好时光,早在我出生之前,程序员甚至没有装配工并直接在机器指令中编写代码.那肯定是一大堆乐趣!

网友评论