我在上家公司做过。把内存中的结构体输出成可读文件,每行包含嵌套的字段名字,以及数值。还能发过来,把可读的这种文件反向读出,写入结构体指针指向的内存之中。
方法就是借助编译可执行文件种的DWARF信息(需要打开编译选项,如果你不想生成文件种包含dwarf可以改你的编译架构,专门生成一个包含dwarf信息的小程序专门给解析器用)。关于DWARF信息可以参考gdb和dwarfdump工具。
dwarf解析的部分我用dwarfdump源代码改造了一下,dwarfdump原始功能是把可执行文件种的dwarf打印出来,我把打印功能去掉,改成在内存种生成dwarf tag树。
有了dwarf tag 树,你就可以计算出每个字段相对结构体起始位置的偏移量了(嵌套结构体需要递归算法实现这个),也就可以把结构体内容输出出来。
相反的,有了dwarf tag树,你也可以把输出来的文件给都回内存,摆放在内存种的位置。
此类功能gdb有,但是gdb代码规模过大,我没能理清,最后实现的是自己琢磨出来的土方法。
--
FROM 49.5.229.*