delphi – 如何解释CPU窗口的反汇编窗格的列?
发布时间:2020-12-15 09:08:58 所属栏目:大数据 来源:网络整理
导读:有一个名为CPU窗口的工具,我按下Ctrl Alt C,显示我的代码的反汇编. 内存地址左侧的绿色箭头表示当前执行点的位置,然后是内存地址,但第二列的含义是什么,为什么编译器有时会在指令后跳转多个地址? 例如: |first column|second column|assembly|004520F4 55
有一个名为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个字节编码,一个用于操作码,四个用于地址. 回到过去的好时光,早在我出生之前,程序员甚至没有装配工并直接在机器指令中编写代码.那肯定是一大堆乐趣! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |