访问GNU对象文件

时间:2013-07-29 11:07:00

标签: gcc arm

我有一个带有一些结构的C文件。目前,我可以使用一个公共符号pub访问结构。

char sym_001[] = { 1,2,3,4,5 };
char sym_002[] = { 3,4,5 };
char sym_003[] = { 0,8,15 };
struct _info { int n; char*a } info[] = {
   { 5, &sym_001 },
   { 3, &sym_002 },
   { 3, &sym_003 }
};
typedef struct pat { int a,b; struct _info*i; struct _pat*p } pat;
pat pat1 = { 3, 4, &info[2], 0 };
pat pat2 = { 3, 4, &info[0], &pat1 };
// 
struct { int property; pat*p } pub = { 1, &pat2 };

我需要序列化为流并将流反序列化回内存布局。一个问题是地址需要以某种方式替换流中的偏移并使用目标处的新地址进行恢复。但这不是真正的挑战。

虽然序列化应该不是问题,但我想访问编译器输出本身。我宁愿避免将我的序列化程序与目标文件链接,因为有很多这样的数据文件要处理。有没有方便的方法来访问GNU二进制文件?

我试过使用objcopy:

objcopy -I elf32-littlearm -O binary DS-Digital8.o foo.bin

但是对于我期望地址(需要重新定位)的所有地方,这都是零。

1 个答案:

答案 0 :(得分:0)

无艺术的噪音评论给出正确的提示。 libelf库完全支持访问目标文件。