c++ - 使用堆栈跟踪检测功能

标签 c++ debugging stack-trace symbols

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

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

非常感谢! :-)

最佳答案

Its a windows machine. I don't quite understand what you mean by "name" and "toolchain". – TCS

TCS:我是在暗示这样一个事实,即有不止一种调试器和不止一种链接器可以在 DLL 中生成不同类型的元数据。

到目前为止,我已经使用 OllyDbg 很好地“调试”(检查/审计)第三方软件(包括DLL)。 ,其中现在似乎有一个全新的2.0版本(here)。

它使代码分析成为一个高手(我猜,如果您熟悉汇编语言和动态加载)。它当然可以轻松跟踪哪些模块调用了哪些模块并将这些(调用)映射到符号名称(如果可用)1 . OllyDbg 尤其是免费的。

在商业方面,我相信有几种类似的工具,我记得其中有 IDA Pro成为最大的名字。

希望对您有所帮助。

<子> 1它将利用调试符号(例如您可以从 Microsoft 下载的符号),它甚至会将 Win32 API 的参数转换为它们有意义的名称(即 WM_PAINT 而不是常量,也知道预期的 LPPARAM 布局等)。

关于c++ - 使用堆栈跟踪检测功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636932/

相关文章:

c++ - 不能在同一个文件中包含 wdm.h 和 ntifs.h

c++ - 处理 POSIX 信号 : how to get stack trace without using backtrace_symbols?

c++ - 单线程可以双重锁定互斥量吗?

C++ 模板和继承

c# - 调试 Nuget 包不起作用

html - 为什么 Firefox 和 Chrome 只是决定不呈现我的页面的一部分?

java - 配置 Java 安装以仅打印堆栈跟踪的前几行

java - 什么是堆栈跟踪,我如何使用它来调试我的应用程序错误?

c++ - union 成员无效

WCF 服务客户端 : How do I debug the response parsing