Я заметил, что в x86 доступны следующие две инструкции по сборке:
E8 cw CALL rel16
E8 cd CALL rel32
Я не понимаю, как процессор инструкций может различать эти два вызова. Единственное, о чем я могу думать, это то, что если приложение 16-битное, IP предполагает первое, а если приложение 32-битное, IP предполагает второе. Верна ли моя интерпретация или есть способ закодировать CALL rel16
в 32-битное приложение?
0x66E8YYYY
(где 66E8 — с прямым порядком байтов, а YYYY — с прямым порядком байтов), который будет интерпретироваться какCALL rel16
при содержании в 32-битном приложении. Это правильно? - person Jeff G   schedule 18.10.20180x56559053
, затем запустите эту команду с0x66E8EBFF
, после чего для EIP будет установлено значение0x00009042
. Очевидно, это не то, что я хотел, поэтому я думаю, что ответ будет отрицательным, вы не можете использовать эту инструкцию в 32-битном приложении, чтобы сделать что-то значимое. - person Jeff G   schedule 19.10.2018call
здесь: felixcloutier.com/x86/CALL.html - person Michael Petch   schedule 19.10.2018