どのようにして64ビットLinux上で32ビットバイナリをアセンブルするためにGas( 'as')を使用できますか?

どのように64ビットLinux上で32ビットバイナリにソースをアセンブルするためにGas( 'as')を使うことができますか?

これは、32ビットのチュートリアルを実行するためのもので、すべてのポインタと多数の命令をクワッドワードに変更する必要がありません。

ありがとう、

クリス。

P.S.私は簡単にCでこれを行うことができます...

[email protected]:~$ cat test.c
#include "stdio.h"

int main() {
    printf("hello world");
    return 0;
}

[email protected]:~$ gcc test.c -o test64
[email protected]:~$ gcc -m32 test.c -o test32
[email protected]:~$ file test32
test32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
[email protected]:~$ file test64
test64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, not stripped
3
GCCで -m32 を使用する - 32
追加された 著者 user786653,

2 答え

as をオプション "--32"と併用する

as -32 source.s -o objectfile

あるいは、gccを使ってassemlerソースファイルをアセンブルしてリンクするだけでも構いません。 gccはそれをエンディングで認識します。

gcc -m32 source.s -o executable

4
追加された
ありがとう、私は盲目でした - それはマニュアルページにあります...ターゲットi386オプション:[-32 | -64] [-n] [-march = CPU [+ EXTENSION ...]] [-mtune = CPU]
追加された 著者 fadedbee,

リンカ -m オプションを使用してファイルをリンクする必要がある場合もあります。このオプションを使用すると、さまざまなターゲットアーキテクチャに対してエミュレーションを設定できます。 ld --help は、可能なエミュレーション値のリストです。

ld -m elf_i386 -o file file.o file2.o ...etc
1
追加された