3

私はプログラミングに本当に慣れていません(一般的に-それは哀れです)、64ビットで実行するためにハッキングしているこのアプリで、いくつかのPython関連のアセンブリが発生しました。

基本的に、コードは次のようになります。

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

.text
  FUNCTION(name)

FUNCTION(name) 構文は、私が知る限り、外部の Python ライブラリのヘッダーを定義するために約 50 回使用されています (完全に理解しているとは言いません。バグ修正を行っているだけです)。

x86_64 用にコンパイルしているため、FUNCTION(name) インスタンスごとに GCC によって次のエラーが吐き出されます。

x86-64 では 32 ビットの絶対アドレス指定はサポートされていません

符号付き 4 バイトの再配置を実行できません

これを x86_64 で実行するにはどうすれば「修正」できますか?

4

1 に答える 1

2

Intel Architecture Software Developer's Manualsのコピーを入手してください。ご覧のとおり、jmp命令の一部の形式は 64 ビット モードでは無効です。特に、「オペランドで指定された絶対アドレスまでジャンプ」という 2 つの形式は機能しません。命令を相対アドレッシングまたは絶対間接アドレッシング形式に変更する必要があります。マニュアルの Volume 2A、私のコピーの 3-549 ページには、 に関する膨大な情報が山積みになっていjmpます。

于 2010-02-15T17:48:29.363 に答える