Я пытаюсь изучить кое-что о языке ассемблера, изучая инструкции в некоторых общих объектах. Я обнаружил конструкцию, где call
инструкция приводит к 1 байт после его начала, например (выход из hte
):Как декодировать этот перемещенный вызов?
af6fc | e8fcffffff call af6fdh
Очевидно, что адрес назначения должен быть заменен на соответствующую функцию (которую я знаю, в этом случае strcmp
). Я нахожу это странным, потому что в других частях же общего объекта функция жеstrcmp
называется использованием механизма .got
/.plt
избавляя от необходимости переписывать часть из .text
. В последнем случае функцию назначения можно идентифицировать, изучив таблицу .rel.plt
вместе с .dynsym
. Но как я могу найти, где непосредственный адрес перенаправляется в первом? Я не мог найти адресатов af6fc
или af6fd
в любом из разделов, по крайней мере, не в тех, которые были доступны для доступа к hte
.