64 bit linux üzerinde 32 bitlik bir ikili oluşturmak için Gas'i ('olarak') nasıl kullanabilirim?

64 bit Linux üzerinde 32 bitlik bir ikili kaynağa kaynak oluşturmak için Gas'i ('olarak') nasıl kullanabilirim?

Bu, tüm işaretçileri ve çok sayıda komutu dört kelimeye değiştirmek zorunda kalmadan uğraşmak zorunda kalmadan 32 bit dersleri takip etmektir.

Teşekkürler,

Chris.

Not; Bunu kolayca yapabilirim ...

[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
- 32 veya gcc ile -m32 kullanın
katma yazar user786653, kaynak

2 cevap

"--32" ile olarak kullanın,

as - 32 source.s -o objectfile

Ya da bir assemler kaynak dosyasını birleştirmek ve bağlamak için sadece gcc'yi kullanabilirsiniz. gcc bunu sonuna kadar tanır.

gcc -m32 source.s -o yürütülebilir

4
katma
Teşekkürler, kör oluyordum - bu adam sayfasında ... Hedef i386 seçenekleri: [--32 | --64] [-n] [-march = CPU [+ EXTENSION ...]] [-mtune = İŞLEMCİ]
katma yazar fadedbee, kaynak

Ayrıca, farklı hedef mimariler için öykünme ayarlamak için -m seçeneğindeki linker'i kullanarak dosyaları bağlamanız gerekebilir. ld - help , olası emülasyon değerlerinin listesini verir.

ld -m elf_i386 -o file file.o file2.o ...etc
1
katma