Chame um ponteiro absoluto no código de máquina x86

Qual é o caminho "correto" paracall um ponteiro absoluto no código de máquina x86? Existe uma boa maneira de fazer isso em uma única instrução?

O que euquer façam:

Eu estou tentando construir um tipo de mini-JIT simplificado (ainda) baseado em "threading de sub-rotina". É basicamente o passo mais curto possível de um intérprete de bytecode: cada opcode é implementado como uma função separada, então cada bloco básico de bytecodes pode ser "JITted" em um novo procedimento próprio que se parece com algo assim:

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

Portanto, a idéia é que o código de máquina real para cada bloco pode ser simplesmente colado de um modelo (estendendo a parte intermediária conforme necessário), e o único bit que precisa ser tratado "dinamicamente" é copiando os ponteiros de função para cada opcode os lugares certos como parte de cada instrução de chamada.

O problema que estou tendo é entender o que usar para ocall ... parte do modelo. O x86 não parece ter esse tipo de uso em mente e favorece as chamadas relativas e indiretas.

istoparece como eu posso usarFF 15 EFBEADDE ou2E FF 15 EFBEADDE para chamar a função hipoteticamente emDEADBEEF (basicamente descobri isso colocando coisas em um montador e desmontador e vendo o que produzia resultados válidos,não entendendo o que eles fazem), mas eu não entendo o material sobre segmentos e privilégios e informações associadas bem o suficiente para ver a diferença, ou como elas se comportarão diferentemente de uma forma mais freqüentecall instrução. O manual de arquitetura da Intel também sugere que eles sejam válidos apenas no modo de 32 bits e "inválidos" no modo de 64 bits.

Alguém pode explicar esses opcodes e como, ou se, eu usaria eles ou outros para esse propósito?

(Há também a resposta óbvia de usar uma chamada indireta por meio de um registro, mas essa parece ser a abordagem "errada" - supondo que realmente exista uma instrução de chamada direta.)

questionAnswers(2)

yourAnswerToTheQuestion