0

我有一个带有一些结构的 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

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

4

1 回答 1

0

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

于 2013-08-02T06:41:23.067 回答