Звоните <Address>Расчет - PullRequest
       16

Звоните <Address>Расчет

0 голосов
/ 01 января 2012

Что ж, я работаю над системой типа Hook, где я хочу скопировать инструкцию вызова (шестнадцатеричный код операции) в определенное место, поэтому, когда она выполняется, она вызывает инопланетную функцию, но когда я собираю вызов0x100 'это получается как' E8 FD ', но как рассчитать 0x100 в 0xFD?Я слышал, что это делается с помощью этого уравнения:

((Origin - Destination)/4)/4

Но как это сделать, если источник не знает?

1 Ответ

1 голос
/ 01 января 2012

Источником является адрес инструкции после вашей инструкции вызова.Так же, как инструкция ближнего JMP.Хранится как смещение.Обратите внимание, что инструкция вызова перегружена.Существует ближний вызов с 16-битным относительным адресом и удаленный вызов с 32-битным относительным адресом

E8 *cw* - CALL rel16 - Call near, relative, displacement relative to next instruction
E8 *cd* - CALL rel32 - Call near, relative, displacement relative to next instruction

Источник: ссылка на набор инструкций Intel.

...