2012-06-11 23 views
14

Tôi đang gỡ lỗi mô-đun mà tôi chỉ có .exe và a .pdb không có ký hiệu riêng.
Trong phiên gỡ lỗi, tôi cần kiểm tra cấu trúc bên trong. Rõ ràng cấu trúc này không xuất hiện trong PDB vì nó là riêng tư - nhưng may mắn là tôi có một tệp .h nơi cấu trúc này được định nghĩa. Vì vậy tôi có thể xây dựng một số mô-đun giả sử dụng cấu trúc này và có được một tệp PDB chứa cấu trúc này.Bắt buộc WinDbg tải biểu tượng của mô-đun chưa tải

Bây giờ tôi có một mô-đun chưa tải với các biểu tượng cấu trúc và tôi muốn tải các biểu tượng của nó để truyền một số bộ nhớ cho cấu trúc đó. (Không dỡ các .exe gốc tôi gỡ lỗi, tất nhiên)
Vấn đề: có vẻ như WinDbg chỉ cho phép tải biểu tượng cho các module được nạp ...

Câu hỏi của tôi là: Có một cách đơn giản tôi có thể tải biểu tượng của tôi từ mô-đun chưa tải?

Tôi đã thử .reload /i /f MyDll.dll nhưng tôi luôn nhận được ...MyDll.dll - unmatched.
Đặt giao lộ không giúp được gì.

Bất kỳ ý tưởng nào?

Trả lời

15

Bạn có thể buộc windbg tải biểu tượng tại một địa chỉ cụ thể, ví dụ:

0:000> .reload /f /i MyDll.dll=77777777 
    c:\sym\MyDll.pdb - unmatched 
0:000> lm 
start    end     module name 
00000000`55555555 00000000`55555555 notepad (no symbols) 
00000000`77530000 00000000`7762a000 USER32  (deferred) 
00000000`77777777 00000000`77777777 MyDll_77777777 (private pdb symbols) c:\sym\MyDll.pdb 

Cảnh báo chưa từng có ở đây là vì windbg không thể nói rằng những biểu tượng phù hợp với phiên bản đúng của các mô-đun vì nó có thể tìm thấy không có dấu thời gian hoặc checksum.

+0

Tôi có thể lấy địa chỉ để tải dll ở đâu .. – 51k

17

Cách tốt hơn là .reload /unl MyDll.dll

được nạp danh sách module chứa dấu thời gian (đối với hình ảnh/khớp pdb) và địa chỉ cơ sở hình ảnh. Sử dụng /unl yêu cầu WinDBG sử dụng thông tin đó.

+1

cảm ơn bạn: lệnh của bạn là biến thể duy nhất phù hợp với tôi! – olegvs

+0

Điều này cũng làm việc cho tôi .. – 51k

Các vấn đề liên quan