用C语言查找结构中的元素

时间:2011-01-14 08:42:45

标签: c programming-languages reverse-engineering structure

是否可以确定库中结构(C语言)中的元素(名称和数据类型)?如果是的话,怎么用C语言呢?如果C语言不支持它,是否可以通过其他技巧获取结构元素或者是否有任何工具?

3 个答案:

答案 0 :(得分:5)

您的意思是在编程时查找,还是在运行时动态查找?

对于前者,当然。只需找到您所包含的.h文件,您就会在那里找到包含所有字段的结构定义。

对于后者,不,这是不可能的。 C将结构编译为机器代码,使所有这些信息都丢失。例如,如果您有一个结构{int x, float y, int z},并且您有一些代码

a = mystruct.y

在机器代码中,所有剩下的就像找到mystruct的指针,向它添加4(int的大小),从那里读取4个字节,然后做一些浮点运算它。这些结构字段的名称和类型都不可访问,因此,无法在运行时找到它们。

答案 1 :(得分:3)

不,这是不可能的。 C没有内置的反射式支持。

答案 2 :(得分:0)

如果通过“确定结构的元素”意味着“以编程方式获得该结构类型的声明”,那么我不相信它是可能的 - 至少不是可移植的。与C ++或Java等更现代的语言相反,C不会将类型信息保存在实际程序可用的表单中。

编辑:

澄清我对“不可移植”不可能的评论:

很可能会有一些编译器+调试格式组合将必要的信息嵌入到它生成的目标文件中,尽管我不能说我知道的一个。然后,假设您可以让程序打开自己的可执行文件并解析调试信息。但这是一种繁琐而脆弱的方法,充其量......

为什么你需要这样做?