Почему так происходит? Да потому
Листинг 3 реакция objdump на tiny-crackme
Почему так происходит? Да потому что ELF-заголовок искажен, а штатные средства LINUX'а таких шуток не понимают, вот и отказываются работать с ним. Пусть после этого кто-нибудь скажет, что UNIX - это хакерская ось! Ранние версии IDA вели себя точно так же, но в последнее время ELF-загрузчик был доработан и теперь мы можем дизассемблировать даже извращенные файлы. IDA жутко ругается: the ELF header entry size is invalid (поле размера ELF-заголовка неверно), the SHT entry size is invalid (поле размера заголовка таблицы секций неверно); SHT table size or offset is invalid (размер заголовка таблицы секций или ее смещение неверно), file contains meaningless/illegal section declarations, using program sections (файл содержит бессмысленные/неверные объявления секций, поэтому будут использоваться программные секции, они же сегменты), но все-таки открывает его и даже начинает дизассемблировать, что очень хорошо!
Экран дизассемблера должен выглядеть приблизительно так:
LOAD:00200000 ; Segment type: Pure code
LOAD:00200000 ; Segment permissions: Read/Write/Execute
LOAD:00200008 start proc near
LOAD:00200008 mov bl, 2Ah ; заслать в регистр BL
значение 2Ah
LOAD:0020000A jmp loc_200040 ; прыгнуть на loc_200040
LOAD:0020000A
LOAD:0020000F align 10h ; мусор какой-то
LOAD:00200010 dd 30002h,1,200008h,20h,1,0,200000h,1,2 dup(31Bh), 7, 1000h
LOAD:00200040
LOAD:00200040 loc_200040: ; CODE XREF: start+2j
LOAD:00200040 jmp loc_200046 ; переход на loc_200046
LLOAD:00200045 db 0B0h ; мусорный байт
LOAD:00200046 loc_200046: ; CODE XREF: start:loc_200040j
LOAD:00200046 call sub_2002F0 ; вызов функции sub_2002F0
LOAD:0020004B
LOAD:0020004B loc_20004B: ; DATA XREF: sub_2002F0+1o
LOAD:0020004B dec ecx ; \
Содержание Назад Вперед