Linux 用の x86-64 アセンブリで記述され、GCC でコンパイルされた非常に特殊なファイルがあります。そのコードを Visual Studio プロジェクトに移動する必要があり、mll64.exe はアセンブリ ファイルを Intel 形式にする必要があります。
クロスプラットフォーム DLL をビルドしようとしましたが、うまくいきません:
15:47:19 cpudiag2 > gcc -共有 -o my.dll my.o
/usr/bin/ld: my.o: 再配置 R_X86_64_32S は、共有オブジェクトを作成するときに「ローカル シンボル」に対して使用できません。-fPIC で再コンパイル my.o: シンボルを読み取れませんでした: 不正な値 collect2: ld が 1 つの終了ステータスを返しました
15:47:19 cpudiag2 > gcc -fPIC my.S
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: 関数 `_start' 内: (.text+0x20): 未定義の参照「メイン」collect2 へ: ld は 1 つの終了ステータスを返しました
そこで、GCC にオブジェクト ファイルから Intel 構文に逆コンパイルさせようとしましたが、それもうまくいきません。次の 2 つのコマンドは両方とも、AT&T 構文で逆コンパイルされたアセンブリ コードになります。なんで?
objdump -d -M=intel my.o
gcc -S -masm=intel my.o