32 ビットおよび 64 ビットの Linux OS 用のドライバーを作成しています。要件の 1 つは、すべてのコードがコールアウトなしで自己完結型である必要があることです。64 ビットでは問題はありませんが、32 ビット GCC では呼び出し命令が次のバイトに追加されるようです。少し検索した後、次のリンクを見つけました。
http://forum.soft32.com/linux/Strange-problem-disassembly-shared-lib-ftopict439936.html
32 ビット Linux でこれを無効にする方法はありますか?
例: 32 ビット逆アセンブル:
<testfunc>:
0: push %ebp
1: mov %esp, %ebp
3: call 4 <test_func+0x4>
<...some operation on ebx as mentioned in the link above>
64 ビット分解:
<testfunc>:
0: push %rbp
1: mov %rsp, %rbp
3: <...no call here>
「testfunc」にはまったく呼び出しがありません。それでも、32 ビット コンパイラがこれらの「呼び出し」命令を追加するのはなぜですか? どんな助けでも大歓迎です。