objdump:无法拆卸未知的架构!

逆向工程 拆卸
2021-06-29 22:32:34

我正在尝试objdump -d fileName在 s-rec 文件上使用它并返回未知的体系结构,但是它可以识别fileName: file format srec

我查看objdump --help并在支持的目标下列出了 srec 和 symbolsrec。

我努力了

objdump -d -M srec myFile

objdump -d -m srec myFile

解决这个问题的最佳方法是什么?备择方案?

2个回答

SREC(又名 S-Record)格式类似于原始二进制文件——它只包含字节值,但与 ELF 不同的是,它没有关于所用 CPU 或操作系统的元数据。

如果您知道所使用的CPU,你可以将它传递到objdump-m开关,例如:

objdump -m arm -D file.srec

通常objdump应该自动识别格式,但您也可以使用-b srec

与这些文件一起使用的常见 CPU 包括以前的摩托罗拉系列,例如 6800/6812(以及派生的飞思卡尔的 HC12)、68K/Coldfire,但有时也有其他的,例如 8051

使用objdump -i本列出您的版本所支持的处理器和文件格式。您可能需要进行自定义 binutils 构建以支持您的目标 CPU。

如果这最终对其他人有用,我有同样的错误,但它是在交叉编译项目中。我的问题是我的 CMake 工具链错误地将 CMAKE_OBJDUMP 设置为 /usr/bin/objdump 而不是 /usr/bin/arm-none-eabi-objdump。我通过强制我的 toolchain.cmake 文件使用 /usr/bin/arm-none-eabi-objdump 和 /usr/bin/arm-none-eabi-objcopy 解决了这个问题,方法是在任何调用之前将这些行添加到我的 toolchain.cmake 中find_program(...):

unset(CMAKE_OBJCOPY CACHE)
unset(CMAKE_OBJDUMP CACHE)

我的 CMake 版本是 3.16.3。我在这里提交了一个错误报告:https : //gitlab.kitware.com/cmake/cmake/-/issues/20787