Использование JMP-функции сборки на x86_64 - PullRequest
3 голосов
/ 15 февраля 2010

Я действительно новичок в программировании (в целом - это жалко), и в этом приложении возникла какая-то сборка, связанная с Python, которую я взламываю на 64-битную версию.

По сути, код выглядит так:

#define FUNCTION(name)        \
  .globl _##name;             \
  _##name:                    \
    jmp *(_p_##name)

.text
  FUNCTION(name)

Насколько я могу судить, синтаксис FUNCTION (имя) используется примерно 50 раз для определения заголовков для внешней библиотеки Python (я не собираюсь делать вид, что полностью его понимаю, я просто исправляю ошибки).

Поскольку я компилирую для x86_64, GCC выдает следующую ошибку для каждого экземпляра FUNCTION (имя):

32-разрядная абсолютная адресация не поддерживается для x86-64

не может выполнить 4-байтовое перемещение со знаком

Как бы я решил "исправить" это для запуска на x86_64?

1 Ответ

2 голосов
/ 15 февраля 2010

Получите копию Руководства разработчика программного обеспечения для архитектуры Intel . Как видите, некоторые формы инструкции jmp недопустимы в 64-битном режиме. В частности, две формы «Перейти далеко, абсолютный адрес, указанный в операнде» не будут работать. Вам нужно будет перейти на форму относительной адресации или абсолютной косвенной адресации инструкции. Том 2А, страница 3-549 в моем экземпляре руководства содержит огромную кучу информации о jmp.

...