2011-07-09 107 views
0

我正在用调试器查看应用程序(我没有源代码!)。 我在某个函数(导出的函数)中放置了一个断点,我查看了堆栈跟踪。 显然我看不到符号,但我可以看到DLL名称和序数。使用堆栈跟踪检测函数

我的问题是如何判断我在堆栈跟踪中看到的函数是否已导出?或者更准确,我在堆栈跟踪中看到的序号是否与我在依赖walker中看到的序号相同?

非常感谢! :-)

+0

POW:“陈述你的名字,平台和工具链”? – sehe

+0

它是一台windows机器。 我不太明白“name”和“toolchain”的含义。 – TCS

回答

1

它是一台windows机器。我不太明白“name”和“toolchain”的含义。 - TCS

TCS:我暗示的事实是,有多个调试器和多个链接器可能会在DLL中生成不同类型的元数据。

为了这一点,我有很好的“调试”(检查/审计)的第三方软件(包括DLL的)与OllyDbg,其中有现在似乎是一个全新的版本2.0(here) 。它使得代码分析成为一个专家(如果你知道围绕汇编语言和动态加载的方式,我猜)。如果可用1,它确实可以轻松跟踪哪些模块调用哪些模块并将这些(调用)映射到符号名称。 OllyDbg尤其是免费的。

在商业方面,我认为有几个类似的工具,其中我记得IDA Pro是最大的名字。

希望有所帮助。它会利用调试符号(如可以从Microsoft下载的符号),它甚至会将参数转换为Win32 APIs为其有意义的名称(即WM_PAINT而不是常量,知道预期的LPPARAM布局等)。 )。

0

从Visual Studio命令提示符启动的命令dumpbin \exports name.dll会告诉您所有导出的函数。

+0

嘿,谢谢你的回答。 我知道如何查看导出的函数,但我不知道我在调用堆栈中看到的序号是否与依赖关系walker中的相同。 – TCS