我正在编译一些固件补丁。这些通常用 C 语言编写,然后修补到固件映像中以更改硬件设备的行为。诀窍是我将替换原始固件中的函数调用以调度到我的补丁,做我的诡计然后调用原始函数并最终返回。
这是一个简单的例子:
__attribute__ ((section (".patches")))
void clean_memory() __attribute__ ((section (".patches")));
void clean_memory() {
int *i;
for (i=(int *)0x80000;i<(int *)0x84000;i++)
*(i)=0;
asm("jsr 0x12345\n\t"); // call the original function
}
我正在用以下内容编译它:
m68k-rtems-gcc -mcpu32 -Wl,--section-start=.patches=0x31000 -O2 -c patches.c
m68k-rtems-ld -nostdlib --oformat=binary -M patches.o -o patches.bin
我真的很想自动化这个过程,而不是每次修改补丁时手动修补文件。
如何获取 patch.bin 文件中每个函数存在的偏移量和长度列表?这在我修补原始函数调用时很重要,因为偏移量会随着修补程序中每个函数的大小的变化而变化