Вызов абсолютного указателя в машинном коде x86

Каков «правильный» способcall абсолютный указатель в машинном коде x86? Есть ли хороший способ сделать это в одной инструкции?

Что яхотеть сделать:

Я пытаюсь создать своего рода упрощенный мини-JIT (до сих пор), основанный на «подпрограмме потоков». По сути, это самый короткий возможный шаг по сравнению с интерпретатором байт-кода: каждый код операции реализован как отдельная функция, поэтому каждый базовый блок байт-кодов может быть "JITted" в свою собственную свежую процедуру, которая выглядит примерно так:

{prologue}
call {opcode procedure 1}
call {opcode procedure 2}
call {opcode procedure 3}
...etc
{epilogue}

Таким образом, идея заключается в том, что фактический машинный код для каждого блока может быть просто вставлен из шаблона (при необходимости расширяя среднюю часть), и единственный бит, который необходимо обработать «динамически», - это копирование указателей функций для каждого кода операции в правильные места как часть каждой инструкции вызова.

У меня проблема с пониманием того, что использовать дляcall ... часть шаблона. x86, похоже, не настроен для такого использования и поддерживает относительные и косвенные вызовы.

Этовыглядит как я могу использовать либоFF 15 EFBEADDE или же2E FF 15 EFBEADDE вызвать функцию гипотетически вDEADBEEF (в основном обнаружил их, поместив материал в ассемблер и дизассемблер и посмотрев, что дало правильные результаты,не понимая, что они делают), но я недостаточно хорошо разбираюсь в сегментах, привилегиях и связанной с ними информации, чтобы увидеть разницу или то, как они будут вести себя не так, как это часто бывает.call инструкция. Руководство по архитектуре Intel также предполагает, что они действительны только в 32-разрядном режиме и «недействительны» в 64-разрядном режиме.

Может кто-нибудь объяснить эти коды операций и как, или если я буду использовать их или других для этой цели?

(Существует также очевидный ответ использования косвенного вызова через регистр, но это похоже на «неправильный» подход - предполагая, что инструкция прямого вызова действительно существует.)

Ответы на вопрос(2)

Ваш ответ на вопрос