2014-01-09 5 views

ответ

4

Внутри вывода obddump -d или -D (дизассемблировать) часто будет множество экземпляров строк, содержащих только многоточие. Это происходит только потому, что все байты между указанными выше и нижними байтами равны нулю (0x00).

Ниже приведена информация о дизассемблированной 32-битной программе. Между смещением 00234 (+4) и 00240 все 0x00 внутри исполняемого файла.

40022c: 00000034 0x34 
400230: 0000016a 0x16a 
400234: 000001ac 0x1ac 
    ... 
400240: 00000098 0x98 
400244: 00000000 nop 
400248: 000000a9 0xa9 
    ... 
400254: 000000cf 0xcf 

Глядя на приложение, которое мы разобранном, вы можете увидеть, что там, где происходит многоточие все нулевые байты. Нет смысла выводить их пользователю несколько раз, поэтому objdump просто удаляет их. Полужирный текст - это то, где происходит многоточие. Следует также отметить, что если есть только один раздел (32/64 бит) нулевых байтов, objdump покажет это как nop или аналогичный в зависимости от машины.

 
Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 

00000220          34 00 00 00    4... 
00000230 6A 01 00 00 AC 01 00 00 00 00 00 00 00 00 00 00 j...¬........... 
00000240 98 00 00 00 00 00 00 00 A9 00 00 00 00 00 00 00 ˜.......©....... 
00000250 00 00 00 00 CF 00 00 00       ....Ï... 
2

Я использовал аргумент -z для objdump, который подавляет скрытие некоторой нулевой информации. Вы должны увидеть аргументы .word с нулями.

Это кажется полезным, когда вы передаете вывод objdump в другую программу.

Смежные вопросы