我在gdb的目标可执行文件之外,甚至没有对应于该目标的堆栈.无论如何,我只想做一步,这样我就可以验证我的汇编代码中发生了什么,因为我不是x86汇编的专家.不幸的是,gdb拒绝进行这种简单的汇编级调试.它允许我在适当的断点上设置和停止,但只要我try 向前单步,gdb就会报告错误"找不到当前函数的边界",EIP不会改变.
其他详细信息:
机器代码是由gcc asm语句生成的,我将其从objdump-d的输出复制到它正在执行的内核内存位置.我不介意使用加载程序将目标代码加载到重新定位的地址的简单方法,但请记住加载必须在内核模块中完成.
我想另一种 Select 是生成一个假内核模块或调试信息文件,提供给gdb,让它相信这个区域在程序代码中.gdb在内核可执行文件本身上运行良好.
(对于那些真正想知道的人,我在运行时将代码插入VMware VM中的Linux内核数据空间,并通过VMware Workstation内置的gdb存根从gdb远程调试内核.请注意,我不是在编写内核漏洞攻击;我是一名安全研究生,正在编写一个原型.)
(我可以在我的程序集中的每条指令上设置一个断点.这很有效,但过一段时间就会变得非常困难,因为x86程序集指令的大小会有所不同,每次重新启动时程序集的位置都会发生变化.)