如何调试没有调试符号的二进制文件?

时间:2010-01-19 08:32:49

标签: windows debugging

我有一个来自前一个程序员的可执行文件(并且没有可用的源代码)。问题是,它开始工作有点儿车,我想弄清楚为什么。该工具从某处读取数据并用它填充组合框。无论如何我可以调试它,看看它从哪里获取数据?

什么工具可以做到这一点?你有这方面的例子吗?

3 个答案:

答案 0 :(得分:5)

SysInternals 套件中有一整套工具,以前由Mark Russinovich提供,现在在微软的网站上(我认为仍然是免费的)。例如,有一些叫做 FileMon ProcessMonitor的东西,可以跟踪打开和关闭文件,也可能还有阅读(等等)。

还有类似的工具用于监控网络/互联网访问。

这些工具让您从“黑匣子”的角度来看待该程序的许多方面,即无需进入源代码或机器代码 - 只需看看它的作用。

答案 1 :(得分:1)

由于你有“windows”标签,也许这不是一个有用的答案,但在类似unix的环境中我首先尝试“truss”命令,或者在linux上使用“strace”命令,然后尝试调试程序,检查二进制文件使用的系统调用,并尝试查找数据是否来自。

也许您可以尝试使用Cygwin中的“strace”,尽管这对于“纯粹的”Windows程序可能没用。

Windows中的另一个可能更好的选择可能是另一个tool

我希望其中一些有帮助。

答案 2 :(得分:1)

由于您没有告诉我们原始语言或IDE,因此很难提供建议。如果原始文件是用C / C ++编写的,并且你有一个匹配的PDB(程序数据库)文件,那么只需将exe加载到visual studio并单步执行即可调试函数名称的版本。否则你完全陷入装配区,这与没有麻醉的根管工作一样有趣。

但是如果你没有源,那么(a)你可能没有PDB和(b)如果你没有源,你会怎么做你发现的任何错误?您是否希望问题有外部原因?