gpt4 book ai didi

delphi - 如何解释 CPU 窗口反汇编 Pane 中的列?

转载 作者:行者123 更新时间:2023-12-03 15:39:51 24 4
gpt4 key购买 nike

有一个名为 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 个字节,其中一个用于操作码,四个用于地址。

回到过去的美好时光,早在我出生之前,程序员甚至没有汇编器,直接用机器指令编写代码。那一定很有趣!

关于delphi - 如何解释 CPU 窗口反汇编 Pane 中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17108127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com