当前位置: 首页 > 面试题库 >

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

仲孙子辰
2023-03-14
问题内容

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

额外细节:

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

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

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

(我可以在程序集中的每条指令上设置一个断点。这可以工作,但是一段时间后会变得很费力,因为x86汇编指令的大小会有所不同,并且每次重新启动时,程序集的位置都会改变。)


问题答案:

您可以使用stepinexti(可以缩写为sini)逐步浏览机器代码。



 类似资料:
  • 问题内容: 我有一个带有IF-ELSE块的SQL代码。IF部分中的代码不应该到达,但是在执行SQL时仍然出现错误。在我首先测试链接服务器的代码中,当它失败时,将其设置为1,并且该块应执行并避免需要查询链接服务器的块中的代码,但是出现此错误: 我正在SSMS 2012中运行查询。为什么会发生此错误? -下列插入SQL语句导致错误 问题答案: 在执行之前,它仍然会解析并绑定所有内容。它没有绑定到这里。

  • 问题内容: 我正在将一些串行处理的python作业转换为dask或joblib的多处理程序。可悲的是我需要在Windows上工作。 从IPython内部运行或从命令行调用python的py文件时,一切运行良好。 使用cython编译可执行文件时,它不再能正常运行:越来越多的进程(无限且大于请求的进程数)逐步启动并阻塞我的系统。 感觉就像多处理炸弹一样-但我当然使用过控制块-通过在命令行上从pyth

  • 我有一个活动,在应用程序第一次运行时弹出指令(在对话框片段中)。 我想在用户不关闭对话框的情况下停止代码的执行。 有可能做到吗??? 编辑:我尝试使用CountDownLatch,但它冻结了我的UI,并且没有显示对话框。 活动: } 对话框(我只列出了所需的方法): 公共类教程对话框扩展了DialogFragment{private final String TAG=getClass().getS

  • 我正在学习Java,并试图用Swing制作一个非常简单的程序。我使用命令行java工具。 这是我第一次尝试制作.jar文件,所以如果这是一个琐碎的问题,我很抱歉。

  • 问题内容: 我在安装psycopg2时遇到问题。我尝试执行以下操作时收到以下错误pip install psycopg2: 但是问题出在我身上PATH; 它运行没有任何问题: 我尝试将径添加到文件中,并使用从其网站(http://initd.org/psycopg/)下载的源文件进行构建,然后收到以下错误消息! 但实际上是那里!!! 这些错误使我感到困惑。有人可以帮忙吗? 顺便说一下,我sudo所

  • 我有独立的应用程序,它绑定在可执行的中。在可执行的清单文件中,有一个class-path条目,其中列出了所有依赖的(包括所有的日志实现jar)。这个可执行jar还包含文件。 使用这种结构,当我使用简单的命令运行应用程序时,应用程序在正确的日志记录下运行良好。但这里的主要问题是,要更改日志级别,需要打开jar文件,而我不能要求客户端这样做。所以我将放在了jar外部,但现在所有日志记录都发生在控制台上