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