Как я могу использовать Gas ('as') для сборки 32-битного двоичного файла на 64-битной Linux? - PullRequest
5 голосов
/ 28 октября 2011

Как я могу использовать Gas ('as') для сборки исходного кода в 32-битный двоичный файл в 64-битном Linux?

Это делается для того, чтобы следовать 32-битным учебным пособиям без необходимости менять всеуказатели и множество инструкций для четырех слов.

Спасибо,

Крис.

PS Я легко могу сделать это в C ...

chris@chris-linux-desktop:~$ cat test.c
#include "stdio.h"

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

chris@chris-linux-desktop:~$ gcc test.c -o test64
chris@chris-linux-desktop:~$ gcc -m32 test.c -o test32
chris@chris-linux-desktop:~$ 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
chris@chris-linux-desktop:~$ 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

Ответы [ 2 ]

5 голосов
/ 28 октября 2011

Используйте as с опцией "--32", например

as --32 source.s -o objectfile

Или вы можете просто использовать gcc для сборки и компоновки исходного файла ассемблера.gcc распознает его по окончанию.

gcc -m32 source.s -o executable

2 голосов
/ 14 декабря 2014

Вам также может понадобиться связать файлы, используя опцию компоновщика -m, чтобы установить эмуляцию для разных целевых архитектур. ld --help дает список возможных значений эмуляции.

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