我正在查看带有调试器的应用程序(我没有源代码!)。 我在某个函数(导出函数)中放了一个断点,然后查看堆栈跟踪。 显然我看不到符号,但我可以看到DLL名称和序数。
我的问题是如何判断我在堆栈跟踪中看到的函数是否已导出?或者更准确一点,我在堆栈跟踪中看到的序数是否与我在依赖性walker中看到的序数相同?
非常感谢! : - )
答案 0 :(得分:1)
TCS:我暗示这样一个事实,即有多个调试器,以及多个链接器可能会在DLL中生成不同类型的元数据。它是一台Windows机器。我不太明白你的意思是“名字”和“工具链”。 - TCS
到目前为止,我已经通过 OllyDbg
对第三方软件(包括DLL)进行了良好的'调试'(检查/审核),其中现在似乎有一个全新版本2.0(here)。
它使代码分析成为一个高手(如果你知道你的汇编语言和动态加载的方式,我猜)。它当然可以很容易地跟踪哪些模块calss,并将这些(调用)映射到符号名称1。 OllyDbg尤其是免费的。
在商业方面,我相信有几种类似的工具,我记得IDA Pro是最大的名字。
希望有所帮助。
1它将利用调试符号(例如您可以从Microsoft下载的符号),它甚至可以将Win32 API的参数转换为有意义的名称(即WM_PAINT而不是常量,知道预期的LPPARAM布局等)。 子>
答案 1 :(得分:0)
从Visual Studio命令提示符启动的命令dumpbin \exports name.dll
将告诉您所有导出的函数。