我有一个在某些客户端上运行的可执行文件。他报告了 mymodule.dll!0xaddr
崩溃。
鉴于我有可执行文件、一个符号服务器、一个正确设置的 WinDbg,是否有任何方法可以在不加载转储或附加到正在运行的进程的情况下查看位置 0xaddr
的代码?
最佳答案
这有点取决于你的“代码”是什么......
- 启动WinDbg
- 选择“打开故障转储...”,而不是“打开可执行文件...”
- 选择您选择的 EXE 或 DLL 文件,而不是 DMP 文件
- Set up your symbols
- 键入
ln mymodule.dll!0xaddr
以查看该地址附近的符号 - 输入
u mymodule.dll!0xaddr
查看汇编代码
如果 EXE 或 DLL 具有 PDB 信息并且 WinDbg 能够找到 PDB,并且如果 PDB 引用源(例如私有(private)符号),您将获得一些有用的信息:
0:000> ln 00412510
[...\addressdemo\addressdemo.cpp @ 8] (00412510) AddressDemo!main | (00412575) AddressDemo!std::uncaught_exception
Exact matches:
0:000> u 00412510
AddressDemo!main [...\projects\addressdemo\addressdemo.cpp @ 8]:
00412510 55 push ebp
00412511 8bec mov ebp,esp
00412513 81ecc0000000 sub esp,0C0h
00412519 53 push ebx
0041251a 56 push esi
0041251b 57 push edi
关于c++ - 如何在没有转储的情况下使用 WinDbg 查看某个偏移量处的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53595997/