debugging 如何在Linux(Fedora)上调试ELF加载过程?

hwazgwia  于 2022-11-14  发布在  Linux
关注(0)|答案(1)|浏览(157)

有哪些有效的方法可以调试在Linux系统上加载ELF二进制文件的实际过程?我在Fedora 36上创建了一个ELF文件。但是,当我试图通过输入./myElfFile从bash运行ELF文件时,我得到了类似cannot execute binary file: Exec format error的错误。我试图确定的是哪个特定的exec格式错误,我想使用调试器或其他动态跟踪来完成这个任务。我曾经不得不在Windows上完成这个任务,最后我在内核调试模式下使用了WinDbg,还有一个叫做GFlags的东西,我打开了“加载器快照”,它允许我观察整个可移植可执行文件的加载过程。最终,我在NtCreateSection和它的被调用者中发现了检查。在Linux/ELF世界中,我如何做这样的事情呢?我想找出加载过程中的哪一步失败了,以及准确地说是哪一步失败了。

tgabmvqs

tgabmvqs1#

我试图确定的是哪个特定的exec格式错误,我想使用调试器或其他动态跟踪来完成此操作。
这个问题(无效的ELF文件)很可能是由 kernel 检测到的。因此,您的程序永远不会启动,并且没有调试器或任何其他 * 用户空间 * 工具会提供帮助。
您可以尝试以下几种方法:

  • 如果myElfFile作为有效文件启动并被修改/修补,检查工作副本和非工作副本上readelf -l ...的输出之间的差异,看看是否可以发现一些必需的不变量的违反(例如,.p_offset % pagesize == .p_vaddr % pagesize?)。
  • 使用readelf -a myElfFile,看看readelf是否输出任何警告。如果输出了,您可以调试readelf,找出它所抱怨的内容--它可能是也可能不是导致内核拒绝您的二进制文件的内容。
  • 使用readelf -l myElfFile的输出更新您的问题,并希望其他人指出问题所在。
  • 在内核 * 尝试exec文件 * 时,使用user-mode Linux调试内核 *。

相关问题