Байты исходного изображения

Если я отлаживаю файл asm с помощью Windbg, изображение загружается в место в памяти, в моем случае это 00400000. Если я выгружаю данные из 00400000, я вижу, что мой ассемблерный код загружается в файл изображения со смещением 10000 от этого адрес, а не 00400000.

Вот дамп для начала образа.

00400000 ->  00905a4d 00000003 00000004 0000ffff
00400010 ->  000000b8 00000000 00000040 00000000
00400020 ->  00000000 00000000 00000000 00000000
00400030 ->  00000000 00000000 00000000 000000c0

Итак, мой вопрос: что это за заголовок в начале изображения и для чего он используется? Похоже, что все изображения имеют этот заголовок.

Заранее спасибо.


person PaulG    schedule 10.07.2017    source источник
comment
Он определен в формате изображения PE (переносимый исполняемый файл). Его спецификацию можно найти на сайте Microsoft.   -  person Peter    schedule 10.07.2017
comment
тывм посмотрю.   -  person PaulG    schedule 10.07.2017
comment
Понял, спасибо Петр. Я быстро проверил это, но порядок байтов поймал меня.   -  person PaulG    schedule 10.07.2017
comment
Это ответ? Может быть, вы хотите удалить свой вопрос или ответить на него самостоятельно.   -  person Thomas Weller    schedule 10.07.2017
comment
Да, комментарий Питера ответил на мой вопрос.   -  person PaulG    schedule 11.07.2017
comment
хорошо, если вы сами ответите, вы также можете попробовать !dh 400000 windbg расшифрует заголовок для вас   -  person blabb    schedule 11.07.2017


Ответы (1)


То, что вы опубликовали, выглядит как заголовок PE в 32-битном формате:

0:000> dd 00400000 
00400000  00905a4d 00000003 00000004 0000ffff
00400010  000000b8 00000000 00000040 00000000
00400020  00000000 00000000 00000000 00000000
00400030  00000000 00000000 00000000 00000080

Если вы выгрузите его как байты, вместе с ним будут показаны символы ASCII, и вы легко сможете распознать заголовок «MZ».

0:000> db 00400000 
00400000  4d 5a 90 00 03 00 00 00-04 00 00 00 ff ff 00 00  MZ..............
00400010  b8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00  ........@.......
00400020  00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00  ................
00400030  00 00 00 00 00 00 00 00-00 00 00 00 80 00 00 00  ................

Вы можете использовать команду !dh для его декодирования:

0:000> !dh 00400000 

File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
     14C machine (i386)
       3 number of sections
5911398E time date stamp Mon May  8 20:37:50 2017

       0 file pointer to symbol table
       0 number of symbols
      E0 size of optional header
      22 characteristics
            Executable
            App can handle >2gb addresses
[...]

Если вы не хотите использовать WinDbg, есть Stud_PE, где вы можете загрузить исполняемый файл и проанализирует это для вас.

person Thomas Weller    schedule 12.07.2017