我有一个使用Borland C ++(1991版)编译的旧DOS程序。可执行文件的末尾包含许多字符串,其后带有下划线,看起来像调试/符号信息:例如:_HandleMemory_AddKey_SetPalette,...

这些字符串中的大多数似乎是函数或变量名称。未使用,大多数函数都以这种方式简单地命名(某些已知的C函数,例如_qsort除外):



评论

您确定它实际上不是DLL导入符号的列表吗?

通过DLL,您是说一个外部库吗? (由于AFAIK,DLL仅是Windows)。我不这么认为,因为这些字符串在其他任何程序文件中都被引用。

DLL是Windows的术语,但是Microsoft并未发明从头开始导入库的方法。我认为您的意思是在其他地方“未引用”。但是:仅列出符号实际上是没有用的。在同一可执行文件中是否有任何引用?您可以上传此文件并提供链接吗,以便其他人可以检查?

是的,您说得对,我的意思是“未引用”。有问题的程序是游戏(Alone in the Dark 1)。它可以在许多废弃软件站点上免费下载,但是我不确定是否可以在此处放置指向可执行文件的链接?

1991年将其定为Turbo C ++ 1.0左右,确实存在问题的尾部数据很有可能是Borland风格的调试信息(16位TDS格式)。实验表明,可用的IDA免费软件-3.7至5.0-无法识别16位Borland调试信息。如果将调试信息剥离到一个单独的TDS文件中(通过tdstrip.exe),则在输出窗口中会收到拒绝消息,这些消息原则上可以处理TDS但希望使用较新的32位格式(从BOA 4.0开始)超越)。如果存在“加载TDS”菜单项,则相同。

#1 楼

如果有人有相同的问题,这是我的解决方法:

1)我使用TDUMP将所有调试符号信息导出到文本文件中。 >
2)我清理了txt文件,只保留了有用的信息:

TDUMP somefile.exe > 1.txt


3)我使用python脚本将文件导入了IDA:请参阅在这里

#2 楼

我已经编写了一个IDAPython脚本,该脚本可以解析调试信息,然后从IDA内部执行相应的重命名。