[room] objdump-дизассемблирование, странные call-конструкции
Sergey Stepanov
=?iso-8859-1?q?dlagovna_=CE=C1_mail=2Eru?=
Вс Май 21 01:06:54 MSD 2006
Здравствуйте товарищи.
Если есть тута программеры, помогите плиз.
Вот мне потребовалось дизассемблировать несколько o-файлов,
и сразу наткнулся на непонятную вещь.
Дизассемблирование провожу через команду objdump -d ./file.o
И вот что вижу в коде (в других функциях тоже есть такие же конструкции)
Код
000012b8 <AllArraysInit>:
12b8: 55 push %ebp
12b9: 89 e5 mov %esp,%ebp
12bb: 83 ec 08 sub $0x8,%esp
12be: e8 fc ff ff ff call 12bf <AllArraysInit+0x7>
12c3: c7 05 00 00 00 00 01 movl $0x1,0x0
12ca: 00 00 00
12cd: c7 05 00 00 00 00 01 movl $0x1,0x0
12d4: 00 00 00
12d7: 83 ec 0c sub $0xc,%esp
12da: 6a 01 push $0x1
12dc: e8 fc ff ff ff call 12dd <AllArraysInit+0x25>
12e1: 83 c4 10 add $0x10,%esp
12e4: c7 05 00 00 00 00 00 movl $0x0,0x0
12eb: 00 00 00
12ee: c7 05 08 00 00 00 0d movl $0xd,0x8
12f5: 00 00 00
12f8: c7 05 0c 00 00 00 00 movl $0x0,0xc
12ff: 00 00 00
...
Меня беспокоят конструкции "e8 fc ff ff ff". Какой-то странный call,
который указывает на середину этой же иструкции - по идее, после этой
команды должен начать выполняться код "fc ff ff ff ...". Какой в этом
смысл? Что обозначают эти странные call - вызовы?
Сразу скажу, что исходный текст был написан на чистом C, без всяких
ухищрений в стиле анти-дебуггинга. Сейчас код утерян, а функции нужно
немного изменить, а я не могу начать из-за вот этой непонятки.
Может это какая-то хитрая оптимизация компилера? Тогда какому asm-коду
этоти команды call xxxx эквивалентны?
(В поисковиках нахожу только что народ декомпилирует o-шники
через objdump, что-то там рассматривает, у многих тоже всречается
эта конструкция, но никто не обращает на нее внимания).
--
Со всяческими пожеланиями, Сергей.
http://xi.net.ru
Подробная информация о списке рассылки smoke-room