【问题标题】:How to "map" a binary to a an architecture + libc version?如何将二进制文件“映射”到架构 + libc 版本?
【发布时间】:2021-01-19 00:16:06
【问题描述】:

我想知道在 Linux 中是否有一种简单的方法,或者是否有一个现有的开源项目可以让我为其提供二进制或固件映像,并且它将返回两种架构(aarch64、armv7-eabihf、armv7m、等)和使用的 libc 类型(glibc、musl、uclibc)?

我希望能够编写一种方法来自动获取正确的 qemu-system-* 映像(例如https://azeria-labs.com/emulate-raspberry-pi-with-qemu/)用于设备仿真以及正确的交叉编译工具链(https://toolchains.bootlin.com/)要模拟的单个二进制文件(理想),或完整的固件映像(不太理想)。

目前的理解——基于file 命令的输出,完整架构可能能够“映射”到 toolchains.bootlin.com 和 qemu-system-* 架构,也许吧?另外,我知道这里有很多关于这个问题的答案,它们显示了类似的答案,但假设你有某种系统访问权限并且可以运行像“ldd”这样的命令。我正在寻找一种解决方案,该解决方案纯粹基于对二进制文件或(如有必要)未知设备的固件映像的静态分析。

【问题讨论】:

    标签: reverse-engineering iot qemu


    【解决方案1】:

    对于独立的二进制文件,您可以为某些标头成员运行 objdump 和 grep 等实用程序。对于体系结构,它应该是 ELF 标头的 e_machine 成员。 我不知道如何从二进制文件中获取 libc 类型,但建议对一些使用所有 libc 类型构建它的小程序进行测试,然后分析 所有已构建二进制文件的标头差异。

    固件映像的任务变得复杂,因为可能存在整个文件系统。我建议使用像 https://github.com/cruise-automation/fwanalyzer 分析它们。

    【讨论】:

    • 只想为任何发现此内容的人添加 - 这为我指明了正确的方向,readelfobjdump 的组合可以获得所需的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2016-05-06
    相关资源
    最近更新 更多