当前位置: 首页 > news >正文

x64dbg的基本调试操作 (未完,待补充)

一、编辑CPP文件并生成磁盘PE文件

1. 编辑CPP文件

2. 生成 → 清理解决方案 → 重新生成解决方案 → 生成磁盘PE文件

二、使用x64dbg打开磁盘PE文件

三、进入main函数代码块的反汇编指令集合

1. 方法一

点击F9,定位到main函数入口,选择上面的jmp <test_code.main> 。定位可见main函数地址和内部信息。双击,跳转到main函数代码块的反汇编指令集合。

2. 方法二

点击[符号] → 选择磁盘PE文件:test_code.exe → 右下角搜索:main → 双击符号[main] → 跳转到main函数代码块的反汇编指令集合

四、运行到选区:F4

正确进入main函数后,执行 [运行到选区:F4] , 可以调试对应某一条代码的指令。操作如下:

1. 选中要想运行的代码的下一条代码对应的指令

2. 按F4,运行目标指令,定位到选中的指令

3. 终端执行了选中指令前面的所有指令,并显示运行结果

4. 如果选中已调试指令的前面指令,按F4,会结束调试

1. 选中要想运行的代码的下一条代码对应的指令

我想要调试第15行的代码:cout << "FuncB() = "<< FuncB(a,b) << endl; 那么我在x64dbg选中注释为:test2.cpp:16的指令。对应的就是第16行代码。

2. 按F4,运行目标指令并定位到选中的下一行指令

此时test2.cpp:16行代码对应的指令VA被标注成黑色,说明已经执行完该指令前面的所有指令,定位到此处

3. 终端执行了选中指令前面的所有指令,并显示运行结果

终端显示第15行代码的执行结果:

4. 如果选中已调试指令的前面指令,按F4,会结束调试

五、[断点:F2] 与 [运行:F9]

1. 对某一指令设置了断点,按[运行:F9],会越过其余指令,直接执行到该断点指令。

2. 若下面已经没有断点指令,再次按[运行:F9],会结束程序。

3. 若下面还有断点指令,再次按[运行:F9],会越过其余指令,直接执行下面的断点指令。

1. 对某一指令设置了断点,按[运行:F9] , 会越过其余指令,直接执行到该断点指令

(1) 点击 [断点] 选项,看见反汇编指令:jmp <test_code.mainCRTStartup> 设置了一次性断点,意味着在[CPU]选项中,点击一次F9,就越过其余指令,直接执行到该断点指令:jmp <test_code.mainCRTStartup>

2. 若下面已经没有断点指令,再次按[运行:F9],会结束程序

从[断点]选项中可知,断点指令:jmp <test_code.mainCRTStartup>下面已经无可运行的断点,所以在[CPU]选项中点击第二次F9,会结束程序

3. 若下面还有断点指令,再次按[运行:F9],会越过其余指令,直接执行下面的断点指令

(1) 点击重新运行

(2) 点击[符号] → 选择磁盘PE文件:test_code.exe → 右下角搜索:main → 点击F2设置断点,标注为红色

(3) 点击 [断点] 选项 ,发现多了一个 <test_code.exe.main>的断点,它的反汇编指令处于上一个断点指令:jmp <test_code.mainCRTStartup>的下面

(4) 点击 [CPU] 选项,第一次点击F9,跳转到第一个断点指令:jmp <test_code.mainCRTStartup>

(5) 第二次点击F9,跳转到符号标注为:<test_code.main>的第二个断点指令:push rbp此处正是main函数反汇编指令集合的入口处。

六、运行到用户代码 (Alt+F9)

如果你仅仅想调试代码部分的反汇编指令,操作如下:

1. 文件→打开Test_Code.exe

2. [符号]选项→点击左边的Test_Code.exe→右下角搜索:main→双击进入main函数

3. 菜单:调试→运行到用户代码 (Alt+F9),此操作仅运行代码相关的指令,跳过无关代码的指令

4. 每次Alt+F9,你会发现终端出现执行代码指令后的结果。

1. 文件→打开Test_Code.exe

2. 点击[符号] → 选择磁盘PE文件:test_code.exe → 右下角搜索:main → 双击符号[main] → 跳转到main函数代码块的反汇编指令集合

3. 菜单:调试→运行到用户代码 (Alt+F9),此操作仅运行代码相关的指令,跳过无关代码的指令

4. Alt+F9步行到相应代码的指令,你会发现终端出现执行代码指令后的结果

七、通过调用函数时的 [跳板地址] 跳转到函数入口处的 [起始地址]

1. 打开Test_Code.exe

2. F9,定位到main函数入口,选择上面的jmp <test_code.main> 。定位可见main函数地址和内部信息。双击  ,跳转到main函数内部

3. 找到call test_code.[地址],鼠标定位,看看里面是否有jmp 到FuncA或者FuncB的。若有,则说明该地址是[跳板地址]。

以FuncA为例,有:

4. 双击进去,就是跳板地址:0000000140011078

5. 再次双击,跳转到FuncA入口处,此时00000001400122A0就是FuncA的起始VA。FuncA(int)作为符号进行标注

6. 右键 → 复制 → 地址,可得到FuncA函数的起始VA

7. 如果你想直接获取FuncA的VA,点击菜单栏的[符号],左边定位到test_code.exe,右下角搜索:FuncA。选中匹配信息,右键→复制→地址。

http://www.dtcms.com/a/355918.html

相关文章:

  • 通信协议再升级,PROFINET和EtherNet IP网关迎接改造升级大挑战
  • 智慧清洁革新者:有鹿机器人自述
  • @Jenkins 介绍、部署与使用标准作业程序
  • 深入 OpenHarmony 内核:设备待机管理模块的休眠调度与资源节能技术
  • AT_abc407_f [ABC407F] Sums of Sliding Window Maximum
  • 告别低效!三坐标测量机提高油缸导向套检测效率
  • 拷贝构造和赋值重载有什么区别
  • 转发、重定向
  • 什么是强化学习? ——— 帮助新手了解
  • 基于51单片机的远程wifi浇花系统设计
  • Snagit 2025.3.0 截图贴图录像编辑
  • Android Keystore签名文件详解与安全防护
  • shell编程学习
  • 基于深度学习的档案级图像修复:Coderformer AI技术解析与应用实践
  • 一、晶振与布局布线处理
  • Python Imaging Library (PIL) 全面指南:Python Imaging Library (PIL)基础图像处理入门
  • 呼叫中心录音加密与数据隔离技术方案全解析
  • Wagtail 扩展 HomePage 模型(一个简单的 例子)
  • 人工智能-python-深度学习-过拟合与欠拟合:概念、判断与解决方法
  • 鸿蒙Harmony-从零开始构建类似于安卓GreenDao的ORM数据库(三)
  • 详解多智能体架构:以 Open Deep Research 项目为例
  • Android中设置RecyclerView滑动到指定条目位置
  • container向harbor推送镜像报错 x509: certificate signed by unknown authority
  • redis添加超时设置
  • SONiC 之 Testbed(2)Ansible
  • Ansible 角色与 Galaxy 生态:角色复用、集合安装与系统角色配置详解
  • 半导体全自动化无人工厂应用
  • Zigbee与LoRaWAN物联网协议深度对比与技术选型指南
  • 激活函数学习
  • FIO的使用教程