如何从Delphi程序或编译器生成的调试信息中提取局部变量信息(地址和类型)?
我的目标是: 给定Delphi编译的32或64位Windows程序中的挂起线程,可以遍历堆栈(可行) 给定堆栈条目,以枚举每种方法中的局部变量及其值。也就是说,至少要找到它们的地址和类型(整数32/64 /有符号/无符号,字符串,浮点数,记录,类...),可以将它们的组合用于查找其值。 第一个很好,这是这个问题的第二个。从高层次上讲,如何在Delphi中给定堆栈条目的情况下枚举局部变量? 从低层次看,这就是我一直在研究的内容: RTTI:未列出有关方法的此类信息。我实际上从未想到过这是一个现实的选择,但无论如何都要在此处列出。 调试信息:加载为调试版本生成的调试信息。 地图文件:即使是详细的地图文件(一种文本格式的文件!打开其中的文件并查看)也不包含局部变量信息。它基本上是地址和源文件行号的列表。非常适合地址与文件和线的关联,例如装订线中的蓝点;不太适合获得更详细的信息 远程调试信息(RSM文件)- 关于其内容或格式的未知信息。 TD32 / TDS文件:我目前的研究方向。它们包含许多其他信息中的全局和局部符号。 我在这里遇到的问题是: 没有TD32文件格式的文档(我可以找到。) 我对它们的大部分了解都来自使用它们的Jedi JCL代码(JclTD32.pas),我不确定如何使用该代码,或者不确定其中的结构是否足够广泛以显示本地var。我很确定它将处理全局符号,但是我对局部符号不确定。我定义了各种各样的常量,并且没有格式的文档,要阅读它们的含义,我在猜测。但是,这些常量及其名称必须来自某个地方。 我可以使用TDS信息找到的源无法加载或处理本地符号。 如果这是正确的方法,那么这个问题将变成“是否存在有关TDS / TD32文件格式的文档,并且是否有任何代码示例加载局部变量?” 代码示例不是必不可少的,但即使非常少也可能非常有用。