使用 gdb 单步执行指定可执行文件之外的汇编代码会导致错误“找不到当前函数的边界”

2024-11-12 08:36:00
admin
原创
30
摘要:问题描述:我在 gdb 的目标可执行文件之外,甚至没有与该目标对应的堆栈。无论如何,我都想单步执行,以便可以验证我的汇编代码中发生了什么,因为我不是 x86 汇编方面的专家。不幸的是,gdb 拒绝进行这种简单的汇编级调试。它允许我设置并在适当的断点处停止,但只要我尝试单步执行,gdb 就会报告错误“找不到当前...

问题描述:

我在 gdb 的目标可执行文件之外,甚至没有与该目标对应的堆栈。无论如何,我都想单步执行,以便可以验证我的汇编代码中发生了什么,因为我不是 x86 汇编方面的专家。不幸的是,gdb 拒绝进行这种简单的汇编级调试。它允许我设置并在适当的断点处停止,但只要我尝试单步执行,gdb 就会报告错误“找不到当前函数的边界”,并且 EIP 不会改变。

其他详细信息:

机器代码由 gcc asm 语句生成,我从 objdump -d 的输出中将其复制到正在执行的内核内存位置。我不介意使用加载器将我的目标代码加载到重定位地址的简单方法,但请记住加载必须在内核模块中完成。

我想另一种选择是生成一个假的内核模块或调试信息文件提供给 gdb,让它相信这个区域在程序代码内。gdb 在内核可执行文件本身上运行良好。

(对于那些真正想知道的人,我在运行时将代码插入 VMware VM 内的 Linux 内核数据空间,并通过 VMware Workstation 的内置 gdb 存根从 gdb 远程调试内核进行调试。注意,我没有编写内核漏洞;我是一名编写原型的安全研究生。)

(我可以在我的程序集中的每个指令上设置一个断点。这种方法虽然可行,但一段时间后就会变得相当费力,因为 x86 程序集指令的大小会有所不同,并且每次重新启动时程序集的位置都会发生变化。)


解决方案 1:

不要gdb运行 ,而是运行gdbtui。或者gdb使用开关运行 。或者在输入 后-tui按。现在您处于 GDB 的TUI模式。C-x C-a`gdb`

回车键layout asm使上方窗口显示程序集——这将自动跟随您的指令指针,尽管您也可以在调试时更改框架或滚动。按C-x s进入单键模式,其中run continue up down finish等缩写为单个键,允许您快速浏览程序。

   +------------------------------------------------ --------------------------+
B+>|0x402670 <主要> 推送 %r15 |
   |0x402672 <main+2> 移动 %edi,%r15d |
   |0x402675 <main+5> 推送 %r14 |
   |0x402677 <main+7> 推送 %r13 |
   |0x402679 <main+9> 移动%rsi,%r13|
   |0x40267c <main+12> 推送 %r12 |
   |0x40267e <main+14> 推送 %rbp |
   |0x40267f <main+15> 推送 %rbx |
   |0x402680 <main+16>子$0x438,%rsp|
   |0x402687 <main+23> mov (%rsi),%rdi |
   |0x40268a <main+26> movq $0x402a10,0x400(%rsp) |
   |0x402696 <main+38> movq $0x0,0x408(%rsp) |
   |0x4026a2 <main+50> movq $0x402510,0x410(%rsp) |
   +------------------------------------------------ --------------------------+
子进程 21518 在:主行:?? PC:0x402670
(gdb)文件/opt/j64-602/bin/jconsole
从 /opt/j64-602/bin/jconsole 读取符号...完成。
(未找到调试符号)...完成。
(gdb)布局 asm
(gdb)启动
(GDB)

解决方案 2:

您可以使用stepinexti(可以缩写为sini)来逐步执行机器代码。

解决方案 3:

您可以在此处执行的最有用的操作是display/i $pc,在使用之前stepi,如 R Samuel Klatchko 的答案中所述。这会告诉 gdb 在每次打印提示之前反汇编当前指令;然后您只需继续按 Enter 即可重复该stepi命令。

(有关更多详细信息,请参阅我对另一个问题的回答- 该问题的背景不同,但原则是一样的。)

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用