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

2023-12-06

There is a tool called the CPU window, which I get pressing Ctrl+Alt+C, that shows the disassembly of my code.

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

例如:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何解释 CPU 窗口反汇编窗格中的列? 的相关文章

  • 这种没有推送寄存器的交换有多安全?

    我对汇编非常陌生 下面的代码应该通过两个不同的函数交换两个整数 首先使用swap c然后使用swap asm 但我怀疑 我是否需要push 我的意思是保存 汇编代码之前寄存器的每个值和pop稍后 就在返回之前 main 换句话说 如果我返回
  • 是否可以在VM内使用VMX CPU指令?

    VM guest 内部的进程是否有可能使用 VMX AMD V VT x CPU 指令 然后由外部 VMM 处理而不是直接在 CPU 上处理 Edit 假设外部VM使用VMX本身来管理其虚拟客户机 即它在Ring 1中运行 如果可能的话 是
  • 对象的引用计数

    在我的代码中 我使用一个小的数据存储类 它是在不同的地方创建的 为了避免内存泄漏并简化事情 我想使用引用计数 所以我这样做了 type TFileInfo class TInterfacedObject IInterface 并删除了我对
  • Flash Builder 条件编译变量

    我正在使用 Flash Builder 4 5 并且我想在调试和发布版本之间使用条件编译 我了解如何使用条件编译以及如何定义编译器常量 我需要的是 IDE 在调试和发布版本之间设置的预定义常量 一种在调试和发布版本之间为编译器指定不同参数的
  • 如何通过命令行将Flash .fla编译为.swf? [复制]

    这个问题在这里已经有答案了 如何在基于 Windows 的操作系统上通过命令行将 Flash fla 文件编译为 swf 需要安装的命令行工具就可以了 谁能建议我该怎么做 以直接的方式 谢谢 您可以使用JSFL为 Flash IDE 编写脚
  • 通过套接字发送动态数组(在记录内)?

    我正在尝试直接使用 SendBuf 将记录从服务器传输到客户端 但是 该记录有一个动态数组的成员 并且我在某处 在 SOF 中 读到 发送记录时 成员必须是静态的 固定长度 但问题是 我无法确定如何我会 将来 发送许多论点 我怎么解决这个问
  • 在 Delphi 或 C++ Builder 中使用 Chromium Edge WebView2 [重复]

    这个问题在这里已经有答案了 既然 Microsoft Chromium Edge 已经最终确定 是否可以在 Delphi 或 C Builder 中使用它 据我了解 它是基于WebView2成分 是否有一个组件 例如TWebView2或者E
  • 从 Delphi VCL 样式获取特定字形

    我想从 VCL 样式获取特定的位图 并将其设置为按钮上的图像 它实际上是帮助问号 在位图样式编辑器中是来自表单的 btnHelp 图像 要从 VCL 样式获取视觉元素 字形 您必须使用GetElementDetails和TCustomSty
  • 如何在Windows上安装机器人操作系统ROSJava?

    ROS 的文档很糟糕 一个很大的讽刺是 ROS 的 Groovy 和 ROSJava 版本的创建是为了让 Windows 等平台上的开发人员能够利用出色的机器人 SDK 而所有安装说明仍然面向 Linux ubuntu 用户 The ROS
  • 如何从该 JAVA 文件中提取 Delphi 类以与 Android 一起使用?

    我的Delphi XE7项目需要与FTDI FT311 Android 配件芯片 http www ftdichip com Products ICs FT311D html 他们帮助提供了一个 Android 演示 其中包括他们的 JAV
  • 添加冗余赋值可以在未经优化的情况下编译时加快代码速度

    我发现一个有趣的现象 include
  • 阻止 IDE 自动添加使用单位

    我正在将 Lazarus 项目转移到德尔福西雅图 Lazarus 项目依赖于 40 多个单元 包括控件 并具有多种应用程序 在所有项目的使用条款中 他们使用了以下内容 uses Classes SysUtils Forms Controls
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 我们可以拥有一台只用寄存器作为内存的计算机吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 寄存器是计算机中最快的存储器 那么如果我们想构建一台只有寄存器甚至没有缓存的计算机 可能吗 我什至考虑用寄存器代替磁盘 尽管它们本质上是易
  • 为什么在展开的 ADD 循环内重新初始化寄存器会使其运行速度更快,即使循环内有更多指令?

    我有以下代码 include
  • 使用按位运算符相乘

    我想知道如何使用按位运算符将一系列二进制位相乘 但是 我有兴趣这样做来查找二进制值的十进制小数值 这是我正在尝试做的一个例子 假设 1010010 我想使用每个单独的位 以便将其计算为 1 2 1 0 2 2 1 2 3 0 2 4 虽然我
  • movzbl(%rdi, %rcx, 1), %ecx 在 x86-64 汇编中意味着什么?

    我想我明白 movzbl rdi rcx 1 ecx 意思是 将零扩展字节移至长整型 并表示将 ecx 扩展为 32 位 但我不完全确定语法 rdi rcx 1 指的是什么 我在某处看到该语法指的是 Base Index Scale 但我找
  • Delphi - Indy - 保存 GMail 草稿

    我一直在 Delphi 下使用 Indy 通过 gmail 帐户发送消息 使用 TIdSMTP 和 TIdMessage 组件 这绝对没问题 但是 我的客户请求将消息保存到 DRAFTS 文件夹 以便他在实际发送消息之前对 以编程方式创建的
  • 如何读取和更改 TEdit 控件的值?

    我有一个表格TForm1有 5TEdit and 2 TBitBtn 我还需要该程序 以便在输入数字数据后Edit1 and Edit2 on BitBtn1Click Edit1 and Edit2值将被求和并显示在Edit3 你想做这样
  • Delphi 的内存分析工具?

    我建立了一个项目并运行它 然后在 Process Explorer 中查看它 结果发现它在启动时使用的 RAM 比我想象的要多 5 倍 现在 如果我的程序运行得太慢 我会将其连接到分析器并让它告诉我什么正在使用我的所有周期 有没有类似的工具

随机推荐

  • 为 iframe 页面创建上一个下一个按钮

    这个主题可能有很多代码 但我似乎正在寻找一种不基于历史的变体 是否可能 所以我有这个代码
  • 我可以在 SQL Server 中删除之前检查约束吗?

    我有以下情况 一个主表和许多其他表通过外键链接在一起 现在 当我想删除主表中的一行时 将会发生 ConstraintsViolation 这是有意且良好的 现在我希望能够在触发删除行事件之前检查 ConstraintsViolation 是
  • 致命错误:调用未定义的函数 mysqli_connect()

    两天来我一直在尝试解决这个问题 但不幸的是没有结果 让我告诉你我关于这个问题的故事 我在网站上构建了一个应用程序 该应用程序处理评论 但是 我试图将其放在另一个站点上 并且我从旧站点复制了 php 文件 sql 文件 并将它们移动到新站点
  • 从 Access 2007 传输到 Excel 2007 时排除列标题的代码

    这是我正在使用的代码 它工作正常 但我需要知道需要哪些附加代码来排除列标题 Private Sub Command104ContrDonatWeekly Click On Error GoTo Command104ContrDonatWee
  • UnitOfWork 等于 Transaction 吗?或者还不止于此?

    互联网上充满了有关UnitOfWork图案 即使如此也不例外 我还是不明白 以我的理解UnitOfWork Transaction in DB 就这样 仅此而已 它是否正确 我的困惑是由于它是如何在不同的环境中实现的ORMs NHibern
  • 正则表达式,按大写字母分割字符串但忽略 TLA

    我正在使用正则表达式 System Text RegularExpressions Regex Replace stringToSplit A Z 1 Trim 按大写字母分割字符串 例如 我的名字是西蒙 变成 我的名字是西蒙 我发现这在处
  • 自动为 Woocommerce 上购买的产品设置特定属性术语值

    我想在下订单并处于 暂停 状态时自动向订购的产品添加特定的属性值 之前设置 我销售独特的产品 并且我设置了 STOCK 属性和 Out Of Stock 缺货 值 当下订单并处于 暂停 状态时 我想自动更改订购产品的特色状态 并向其添加缺货
  • WCF 捕获异常“服务器未提供有意义的回复..”

    服务器调用后 我的客户端捕获异常并显示以下消息 服务器没有提供有意义的回复 这可能是由合同不匹配 会话过早关闭或内部服务器错误引起的 另外 请注意我尝试了配置WCF 服务器没有提供有意义的回复 但还是没用 请注意 我将服务调试到最后 并且数
  • Spring Boot 2:动态刷新属性不起作用

    我已经按照这个官方教程进行操作了入门集中配置使用 Spring Boot 2 0 0 RELEASE 和 Spring Cloud Finchley M8 但动态刷新属性 无需重新启动 不起作用 经过一些调试 我注意到在ContextRef
  • 使用 Backbone.js 的投票系统

    我有一个Book具有属性的模型upVotes Book可以从数据库 MongoDB 查询 修改实例 然后保存 如果用户对一本书进行投票 我会更新upVotes计数 并将整个模型保存回服务器 问题是 如果其他人在实例加载时间和保存实例时间之间
  • spring:escapeBody 导致无效的 JSON

    我试图转义 JSP 中的字符串以在 AJAX 调用上返回有效的 JSON 但是 spring escapeBody 标记未正确转义 JSON 的单引号 有效的 JSON 不应转义单引号 status success body
  • Spring数据中的@Transient不起作用

    I have Settlement entity Entity Table name settlement public class Settlement ManyToOne JoinColumn name subscription x p
  • 使用 Elmah 记录 WCF Web 服务的用户名

    我们正在使用描述的方法here使用 Elmah 记录我们的 Web 服务错误 这确实有效 但遗憾的是记录的用户名是空的 我们做了一些调试 发现在 ErrorHandler 中记录错误时HttpContext Current User具有正确
  • Windows Phone ApplicationBar BackgroundColor 属性样式 XamlParseException

    我的应用程序中有很多页面 我决定在 App Resources 中创建一个全局 ApplicationBar 样式 然而 当我尝试启动应用程序时 VS 给了我一个错误 The property BackgroundColor was not
  • 在 PHP 安装上启用 Mcrypt

    我使用 Apache 2 2 16 在 Windows 机器上安装了 PHP 5 2 14 通过 msi 安装 安装附带了 ext php mcrypt dll 和 libmcrypt dll 但当我取消注释时扩展名 php mcrypt
  • Sql PIVOT 和字符串连接聚合

    我想使用数据透视 SQL 查询来构造一个结果表 其中连接文本作为数据透视表的数据部分中的结果 即我使用简单的选择得到以下结果 Event Name Resource Type Resource Name Event 1 Resource T
  • web.xml 中使用 CharacterEncodingFilter 进行 Spring 编码

    stackoverflow com 上的编码 我的网站上的编码
  • 将 JXTable 与 RXTable 组合

    Problem 我想要的能力JXTable与 编辑时全选 行为RXTable 进行简单的覆盖就可以了 但是 RXTable 的双击功能不适用于 JXTable 当使用 按钮操作 模式时 这很好 但是当使用 F2 或双击 JXTable 中的
  • 为什么函数的地址会随着每次运行而改变?

    我正在努力将地址映射到其符号以进行调试 获取调用堆栈 MS dbghelp dll 可以从地址中识别符号 请参阅SymFromAddr MSDN 然而 它不起作用 我想知道这是如何工作的 因为地址似乎随着程序的每次运行而改变 include
  • 如何解释 CPU 窗口反汇编窗格中的列?

    There is a tool called the CPU window which I get pressing Ctrl Alt C that shows the disassembly of my code 内存地址左边的绿色箭头表