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

用C语言查找结构中的元素,c,programming-languages,reverse-engineering,structure,C,Programming Languages,Reverse Engineering,Structure,是否可以确定库中结构(C语言)中的元素(名称和数据类型)?如果是,如何用C语言实现?如果C语言不支持它,是否可以通过其他技巧获取结构元素,或者是否有任何工具可以使用它?不,这是不可能的。C没有内置的反射样式支持。您的意思是在编程时查找,还是在运行时动态查找 当然是前者。只要找到包含的.h文件,就会找到包含所有字段的结构定义 对于后者,不,这是不可能的。C将结构编译成机器代码,这样所有这些信息都会丢失。例如,如果您有一个struct{intx,float y,intz},并且您有一些代码 a =

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

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

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

当然是前者。只要找到包含的.h文件,就会找到包含所有字段的结构定义

对于后者,不,这是不可能的。C将结构编译成机器代码,这样所有这些信息都会丢失。例如,如果您有一个struct
{intx,float y,intz}
,并且您有一些代码

a = mystruct.y
在机器代码中,剩下的就是找到指向
mystruct
的指针,向其添加4(int的大小),然后从中读取4个字节,然后对其执行一些浮点操作。这些结构域的名称和类型都不可访问,因此在运行时无法找到它们。

如果“确定结构的元素”是指“以编程方式获取该结构类型的声明”,那么我认为这是不可能的,至少不可移植。与C++等现代java语言不同,C不将类型信息保持在实际程序中可用的形式。 编辑:

为了澄清我关于它不可能“便携”的评论:

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


为什么需要这样做?

我有一个结构,我一直在通过API将数据打包到该结构中,但如果我试图在console上打印值,它就无法打印正确的值。因此,如果我知道数据存储在结构内部的确切位置,我就能够打印出来,从而试图找到结构的特定元素。@S.Man:你能用一些示例代码更新你的问题吗?大多数用可变格式(通常通过使用联合)生成结构的C API也有一个或多个字段,这样您就可以知道每个实例符合哪种格式。如果格式不是可变的,那么你应该直接引用元素,根据维基百科,C++ RTTI只能用于至少有一个虚拟方法的对象。这意味着C++不为C风格的结构做RTTI。感谢您的答复,但是如何在机器代码中找到MyStReTo的指针?您需要读取程序集并理解(一种完全不同的语言)。但我不认为你是这个意思。也许你误解了我说的“找到指向我的结构的指针”。我的意思是,生成的代码将知道
mystruct
在哪里(可能它会从堆栈中删除地址),然后它将执行必要的算法。但其中没有足够的信息,无法在运行时知道字段的名称和类型。