C/C++,我实现过这种功能,最终是一个函数,参数需要结构体指针,结构体类型名还有一个你不知道的参数--结构体被使用的源代码文件名。
1,程序外围脚本,编译系统需要配合修改。为了性能,先编译,生成一个小exe,使用-g3模式编译,保留内部DWARF信息,小exe用来提取dwarf信息,重建结构体结构信息使用;
2,下载dwarfdump源代码,魔改!!使之能从exe中读取TAG, ATTR。建立状态机跟踪结构体,字段的解析状态。DWARF里的结构体信息保存是不会嵌套的,子类型直接用子类型的16进制tag做索引;
a,实现一个读取小exe,解析结构体类型树的函数生成类型树的功能;多次循环解析exe中的dwarf,直到待求解结构体类型的所有子类型都被解析或者某次解析未能识别出任何有用tag
b,实现一个使用类型树对结构体指针内存进行反向解析输出的功能
(第二部,我做了一个月才能用,领导看我的眼神都变了,他们不喜欢这种深耕类型的技术)
--
修改:pfan117 FROM 59.109.156.*
FROM 59.109.156.*