c - 简单修改elf文件的工具?

标签 c embedded

我的嵌入式项目有一个后处理步骤,用闪存(某些部分)的 CRC 替换可执行文件中的值。此步骤只能在链接后完成,因为这是对图像进行 CRC 校验的第一次机会。过去的文件格式是 COFF,我创建了一个自定义工具来进行修补。

开发工具已经切换到ELF,需要重新实现CRC patcher。在我这样做之前,我想我会寻找一个现有的工具来做到这一点。编译器基于 gcc,但我看不到 ldnm 以及 readelf 的任何组合可以完成这项工作。谷歌搜索没有结果。

我目前的工具使用 nm 找到要修补的地址,并使用地址、预期值(以防止覆盖错误数据)和新的 CRC 值调用修补程序。 CRC 是根据可执行文件(我也修补过)的“十六进制”格式计算的,所以幸运的是我不必重做那部分。

我可以再次使用 libelf 和自定义代码实现它,但在我这样做之前,它是否已经存在?

有没有更好的方法来实现我将可执行文件的 CRC 放入可执行文件以便应用程序可用的目标?

最佳答案

如果我理解了您要正确执行的操作,我认为以下方法会起作用:

  • nm 为您提供要修补位置的运行时虚拟地址;
  • readelf -S 为您提供每个部分开头的运行时虚拟地址和文件内的偏移量;
  • 将两者拼接在一起(例如,使用您最喜欢的脚本语言的几行代码)给出要修补的文件内的偏移量。

关于c - 简单修改elf文件的工具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842904/

相关文章:

使用 Ceedling 定义编译器标志

linux - 在嵌入式 Linux 系统上将 SDL 应用程序作为守护进程运行

C 数组指针用法说明

Windows 中缺少 conio.h

c - 定义 char a[5] 和 char (*a)[5] 有什么区别?

使用嵌入式 FPGA 中的 MAC 地址与套接字进行通信

windows - 如何在 Windows XP 中为 USB 串行加密狗获得稳定的 COM 端口?

embedded - 固件工程师可以从软件工程师那里学到什么?

c - 在链表末尾添加数据的函数

c++ - ShellExecute无法在Windows XP中打开特殊文件夹?