Как GOT / PLT работает на MIPS? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь отладить ошибку, связанную с доступом к регистру gp.

Я заметил, что все функции начинаются примерно так:

0x400b7c <main>:   lui   gp,0xa
0x400b80 <main+4>: addiu gp,gp,31444
0x400b84 <main+8>: addu  gp,gp,t9

Как объяснено здесь: https://www.cr0.org/paper/mips.elf.external.resolution.txt, использование t9, похоже, относится к "классическому GOT / PLT mec [h] anism".

Однако этот документ не очень поучителен, поэтому мой вопрос:

Какова процедура для получения соответствующего значения t9 для использования при вызове функции? (Предположим, генератор кода времени выполнения / JIT-подобный вариант использования.)

Обновление: я нашел более полную документацию: https://gcc.gnu.org/ml/gcc/2008-07/txt00000.txt.

1 Ответ

0 голосов
/ 01 мая 2018

Это просто адрес функции. Вычисление в функции извлекает gp из собственного адреса функции.

...