は
call printf
位置に依存しないコードで使用できますか? 一方ではcallは相対的であり、他方ではprintfはライブラリ関数です。答えがそうでない場合、その理由は何ですか? リンク段階でprintfのコードが書いたファイルにコピーされない?(そして、それは私には大丈夫のようです)。
は
call printf
位置に依存しないコードで使用できますか? 一方ではcallは相対的であり、他方ではprintfはライブラリ関数です。答えがそうでない場合、その理由は何ですか? リンク段階でprintfのコードが書いたファイルにコピーされない?(そして、それは私には大丈夫のようです)。
GOTを使用して相対 FAR 呼び出し (モジュール間呼び出し) を実行できます。これは、絶対アドレスを保持しprintf
、次に を呼び出すとprintf
、次のように実行CALL [GOT + printf_index * sizeof(ptr)]
されます (この式は、アセンブリ/コンパイル中に定数に折り畳まれます)。
別の、しかしまったくひどい方法は、使用している CRT 関数を共有ライブラリ/バイナリにマージすることです (MSVC はこの静的リンケージを呼び出します)。静的にリンクされていた CRT の未発見のバグ。