Здравствуйте товарищи.Вот мне потребовалось дизассемблировать несколько o-файлов, и сразу наткнулся
на непонятную вещь.
Дизассемблирование провожу через команду objdump -d ./file.o
И вот что вижу в коде
000012b8 <ProgInit>:
12b8: 55 push Кp
12b9: 89 e5 mov %esp,Кp
12bb: 83 ec 08 sub $0x8,%esp
12be: e8 fc ff ff ff call 12bf <ProgInit+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 <ProgInit+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, без всяких
ухищрений в стиле анти-дебуггинга. Сейчас код утерян, а функции нужно
немного изменить, а я не могу начать из-за вот этой непонятки.