我有一些客户端上运行的可执行文件。他在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
    

    08-06 09:29