2009-05-16 9 views
6

Mam rodzimą bibliotekę dll, która jest zbudowana z symboli. Istnieje etap budowania postu, który modyfikuje bibliotekę dll. Etap kompilacji postów powoduje kompresję i prawdopodobnie dołącza niektóre dane. Plik pdb jest nadal ważny, jednak ani WinDbg ani Visual Studio 2008 nie załadują symboli dla biblioteki dll po etapie kompilacji. Jakie bity w pliku pdb lub bibliotece DLL należy zmodyfikować, aby uzyskać program WinDbg lub Visual Studio, aby załadować symbole podczas ładowania zrzutu, do którego odwołuje się nasza biblioteka DLL?Symbole (pdb) dla rodzimej biblioteki dll nie są ładowane ze względu na krok budowania postu

Czy to rozmiar pliku ma znaczenie? Suma kontrolna lub hash? Znacznik czasu?

Modyfikuje zrzut? lub modyfikować pdb? zmodyfikować bibliotekę dll przed jej wysłaniem?

(Wiemy, że pdb jest ważny, ponieważ jesteśmy w stanie go użyć do ręcznego pobrania nazw symboli dla zrzutu listy wywoławczej, które odwołują się do wydanej biblioteki dll. To po prostu całkowity ból w * ss zrobić to ręcznie dla każdego adresu w callstack we wszystkich wątkach.)

Odpowiedz

11

This post doprowadził mnie do chkmatch. Na dll przetworzonej, chkmatch pokazuje tę informację:

 
Executable: 
TimeDateStamp: 4a086937 
Debug info: 2 (CodeView) 
TimeStamp: 4a086937 Characteristics: 0 MajorVer: 0 MinorVer: 0 
Size: 123 RVA: 00380460 FileOffset: 00380460 
CodeView signature: sUar 

Debug information file: 
Format: PDB 7.00 
Result: unmatched (reason: incompatible debug information formats) 

Z tej samej WPB przeciwko wstępnie przetworzony dll, zgłasza to:

 
Executable: 
TimeDateStamp: 4a086937 
Debug info: 2 (CodeView) 
TimeStamp: 4a086937 Characteristics: 0 MajorVer: 0 MinorVer: 0 
Size: 123 RVA: 00380460 FileOffset: 00380460 
CodeView format: RSDS 
Signature: (my guid) Age: 19 
PdbFile: (my path) 

Debug information file: 
Format: PDB 7.00 
Signature: (my matching guid) Age: 19 

I otworzyły się obie wersje dll i udał się do przesunięcie 00380460. W wersji oryginalnej, wystarczająco jasne, widzę nazwę pdb, ale w post-przetworzonej wersji nie ma informacji o pdb w tym offsecie. Szukałem ścieżki pdb i znalazłem dokładnie ten sam blok - właśnie przy innym przesunięciu. Następnie przeszukałem bin bajty "38 00 60 04" w oryginalnej bibliotece dll. Patrząc na to samo przesunięcie w przetwarzanej bibliotece DLL, znalazłem te same bajty. Więc dostosowałem RVA i przesunięcie (zlokalizowane przez dopasowanie bajtów). Bingo! Teraz chkmatch podaje dokładnie takie same wyniki dla przetworzonej biblioteki dll, co oryginał (poza zmiennymi RVA i FileOffset).

Edycja: Potwierdzono, teraz Visual Studio ładuje symbole zrzutu, które odwołują się do przetworzonej biblioteki dll.

+0

+1: Dziękuję, że wróciłeś z tak szczegółowym opisem. – RichieHindle

2

w Windbg spróbuj użyć .symopt +40, to wymusi załadowanie pdb.

+0

Próbowałem z oryginalną przetworzoną biblioteką DLL, ale to nie robiło różnicy w tym przypadku - podejrzewam, ponieważ RVA i FileOffsets były po prostu błędne po etapie kompilacji postu. –

Powiązane problemy