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

其他详细信息:

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

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

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

(我可以在我的程序集中的每条指令上设置一个断点.这很有效,但过一段时间就会变得非常困难,因为x86程序集指令的大小会有所不同,每次重新启动时程序集的位置都会发生变化.)

推荐答案

您可以使用stepinexti(可以缩写为sini)单步执行机器代码.

Linux相关问答推荐

创建守护进程时打开0,1,2描述符

我想显示包含一个方括号的行,方括号可以是开括号,也可以是闭括号.

从一个文件中读取文件名并将文件名和内容存储到另一个带有|的文件中作为分隔符

我可以在不调用 shell 的情况下使用 popen() 吗?在 C++ 中

如何在 Linux 上打印带有屏蔽值的环境名称?

查找更高版本的文件

有没有办法定义自定义隐式 GNU Make 规则?

sig_atomic_t 实际上是如何工作的?

如何在 Linux 上捕获原始 HID 输入?

Linux 非阻塞 fifo(按需日志(log)记录)

如何在 linux ElementaryOS 中修复 Genymotion,但未找到错误CXXABI_1.3.8

我如何从 Ubuntu 上的源代码自己构建 python?

从文本文件中删除奇数行或偶数行

Colored shell 脚本输出库

Anaconda:禁用提示更改

当将信号量减为零的进程崩溃时,如何恢复信号量?

使用 Bash 查找和复制文件

如何在没有 root 用户的情况下在 Linux (CentOS) 中安装软件包并进行自动依赖处理?

具有所有内核的 Gzip

在linux中将制表符分隔的文件转换为csv的最快方法