Можно ли добавить отсутствующие символы в публичные символы в сеансе отладки windbg? - PullRequest
3 голосов
/ 25 ноября 2010

Я пытаюсь увидеть структуру IMAGE_DOS_HEADER с помощью команды 'dt' в windbg:

0:001> dt ntdll!IMAGE_DOS_HEADER
**Symbol ntdll!IMAGE_DOS_HEADER not found**

Я искал и обнаружил, что другие смогли сделать это: Блоги MSDN> Блог Junyoung> Формат переносимых исполняемых файлов при дампе памяти

0:000> dt IMAGE_DOS_HEADER 77c00000
ntdll!IMAGE_DOS_HEADER
   +0x000 e_magic          : 0x5a4d ? MZ
   +0x002 e_cblp           : 0x90
   +0x004 e_cp             : 3
   +0x006 e_crlc           : 0
   +0x008 e_cparhdr        : 4
   +0x00a e_minalloc       : 0
   +0x00c e_maxalloc       : 0xffff
   +0x00e e_ss             : 0
   +0x010 e_sp             : 0xb8
   +0x012 e_csum           : 0
   +0x014 e_ip             : 0
   +0x016 e_cs             : 0
   +0x018 e_lfarlc         : 0x40
   +0x01a e_ovno           : 0
   +0x01c e_res            : [4] 0
   +0x024 e_oemid          : 0
   +0x026 e_oeminfo        : 0
   +0x028 e_res2           : [10] 0
   +0x03c e_lfanew         : 232

Можно ли добавить отсутствующий символ в публичные символы ntdll, чтобы я мог получить доступ к полям структуры данных в сеансе отладки windbg?

Это действительно странно - я попробовал следующее и получил разные результаты на win7 и на системах winxp - WinXP:

0:015> dt ntdll!*HEADER*
          ntdll!_IMAGE_NT_HEADERS
          ntdll!_IMAGE_FILE_HEADER
          ntdll!_IMAGE_OPTIONAL_HEADER
          ntdll!_SLIST_HEADER
          ntdll!_DISPATCHER_HEADER
          ntdll!_IMAGE_SECTION_HEADER

Win7:

0:000> dt ntdll!*HEADER*
          ntdll!_IMAGE_NT_HEADERS
          ntdll!_IMAGE_FILE_HEADER
          ntdll!_IMAGE_OPTIONAL_HEADER
          ntdll!_IMAGE_DOS_HEADER
          ntdll!_SLIST_HEADER
          ntdll!_DISPATCHER_HEADER
          ntdll!_MM_PAGE_ACCESS_INFO_HEADER
          ntdll!_WHEA_ERROR_RECORD_HEADER
          ntdll!_HEAP_USERDATA_HEADER
          ntdll!_HEAP_USERDATA_HEADER
          ntdll!_WHEA_ERROR_RECORD_HEADER_VALIDBITS
          ntdll!_WHEA_ERROR_RECORD_HEADER_FLAGS
          ntdll!_XSAVE_AREA_HEADER

Так что кажется, что символ _IMAGE_DOS_HEADER убран из общедоступных символов winxp's ntdll.dll - мой вопрос остается - как я могу добавить символ, если я знаю структуру к общедоступным символам dll dll, которых у меня нет источники для?

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

Это случается, это может быть довольно неприятно на самом деле (хотя они проделали хорошую работу по очистке многих из них).

Вы можете добавлять типы к существующим PDB, хотя для этого требуется наличие компилятора Visual C (из Visual Studio или из WDK). Я обрисую шаги в моем ответе здесь:

http://www.osronline.com/showthread.cfm?link=193747

Мы используем там ядро, хотя у вас те же шаги. Различия будут:

1) Ищите ntdll вместо nt

2) Вам нужно написать файл C с определением структуры, которую вы хотите.

-Скотт

0 голосов
/ 18 декабря 2010

Вы также можете проверить эту тему, она показывает, как добавить типы к

http://www.woodmann.com/forum/showthread.php?10295-Mysteries-of-win32k-amp-GDI&p=72632&viewfull=1#post72632

сообщение # 21

0 голосов
/ 26 ноября 2010

Они не пропущены, просто у вас не настроен путь к символам. Проверьте следующее Microsoft KB , если это не сработает, у вас может быть проблема с шоком.

Один из способов убедиться, что вы отлаживаете символы - это команда lm. Вывод без символов отладки, вероятно, будет выглядеть следующим образом:

lm
start    end        module name
01000000 01014000   notepad    (no symbols)     
74720000 7476b000   MSCTF      (export symbols)       C:\WINDOWS\system32\MSCTF.dl

Пока вывод команды lm с символами отладки будет:

lm
start    end        module name
01000000 01014000   notepad    (pdb symbols)          e:\LocalSymbols\notepad.pdb\15800B8231AF4FDE85232D42B267D3E51\notepad.pdb
...