访问程序中的符号表以打印结构的字段名称
Posted
技术标签:
【中文标题】访问程序中的符号表以打印结构的字段名称【英文标题】:Access symbol table within a program to print field names of a structure 【发布时间】:2016-06-03 10:38:54 【问题描述】:我想打印结构的所有字段名称(我正在使用 Visual Studio 2012)。
现在,我知道字段名称信息在二进制文件中丢失了,但它在编译时存在。因此,如果以某种方式,我可以访问代码中结构的符号表,那么我应该能够打印字段名称。
用例是结构的定义可能会随着不同的架构而改变,而不是编写依赖于架构的代码,我想直接从符号表中访问字段名称。
编辑:
我感兴趣的结构是“winnt.h”中的“_CONTEXT”。它有多个定义,我想在当前架构上打印定义而不编写依赖于架构的代码。
【问题讨论】:
【参考方案1】:您不能在 C/C++ 中执行此操作,因为该语言没有 C# 或 Java 中的 反射。您可以编写自己的函数,将名称、类型、大小打印到某个 string
对象中。你可能有一个带有虚函数RenderMembers
(或类似)的接口。让所有需要的类/结构都继承并实现它。
MFC RUNTIME_CLASS
有类似的东西。
【讨论】:
那你根本做不到。逆向工程不会很好地工作。如果您尝试逆向工程,字段名称将不正确。 如果您说 EXE 是使用/DEBUG
标志构建的,并且您拥有 PDB。那是一个不同的故事。真的很难。
如果EXE是用/DEBUG
标志构建的,你能告诉我怎么做吗?
“所以我无法重新编译任何代码以打印其字段名称..” 现在你说的不是吗?
对不起,我误解了。我可以重新编译我的测试代码。我将删除编辑以上是关于访问程序中的符号表以打印结构的字段名称的主要内容,如果未能解决你的问题,请参考以下文章