Как установить и использовать GAS (GNU Compiler) в Linux? - PullRequest
10 голосов
/ 23 ноября 2010

Я использую Ubuntu, и я искал компилятор ассемблера для Linux, и я нашел GAS.

Я пытаюсь установить и запустить его, но не могу.

Ответы [ 5 ]

16 голосов
/ 23 ноября 2010

as - это GNU Assembler . Он найден в binutils, но если вы сделаете:

sudo apt-get install build-essential

Вы получите gas вместе с gcc (по умолчанию для сборки на заднем конце используется gas).

Для «учебника» по использованию gas вы, вероятно, захотите прочитать Программирование с нуля , в котором оно используется.


Чтобы создать статический исполняемый файл из файла .s,

#!/bin/bash
f="${1:-}"
as "${f}" -o "${f%%.s}.o" && ld "${f%%.s}.0" -o "${f%%.s}"
gcc -nostdlib -static "${f}" -o "${f%%.s}"

Если вы хотите связать с библиотеками, обычно проще всего позволить gcc использовать правильные параметры командной строки для as и ld при сборке исполняемого файла из исходного файла asm.
gcc foo.s -o foo будет работать, если ваш foo.s определяет функцию main.

Также связано: Сборка 32-битных двоичных файлов в 64-битной системе (набор инструментов GNU) , если вы пишете 32-битные программы в системе x86-64.

4 голосов
/ 23 ноября 2010

Запустите Synaptic и введите «GNU Ассемблер» в строку быстрого поиска. Сразу видно, что binutils является обязательным пакетом.

И вы можете обнаружить, что он уже установлен. Мой binutils 2.20.1-3ubuntu7 уже установлен, и у меня довольно ванильная настройка.

Ввод as --version из окна терминала даст вам знать:

GNU assembler (GNU Binutils for Ubuntu) 2.20.1-system.20100303
Copyright 2009 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `i486-linux-gnu'.
4 голосов
/ 23 ноября 2010

Он в упаковке binutils.

0 голосов

Сборка из исходного кода и его использование

#!/usr/bin/env bash
set -eux

# Build.
sudo apt-get build-dep binutils
git clone git://sourceware.org/git/binutils-gdb.git
cd binutils-gdb
git checkout binutils-2_31
./configure --target x86_64-elf --prefix "$(pwd)/install"
make -j `nproc`
make install

# Test it out.
cat <<'EOF' > hello.S
.data
    s:
        .ascii "hello world\n"
        len = . - s
.text
    .global _start
    _start:
        mov $4, %eax
        mov $1, %ebx
        mov $s, %ecx
        mov $len, %edx
        int $0x80
        mov $1, %eax
        mov $0, %ebx
        int $0x80
EOF
./install/bin/x86_64-elf-as -o hello.o hello.S
./install/bin/x86_64-elf-ld -o hello hello.o
./hello

GitHub upstream .

TODO: как настроить as определенные опции? Мы использовали ./configure с верхнего уровня binutils-gdb, но он содержит опции из нескольких проектов, таких как gdb, я полагаю, а не as определенных?

Проверено на Ubuntu 18.04.

0 голосов
/ 23 ноября 2010

Читали ли вы http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html? о том, что Debian GAS содержится в пакете

Binutils

так

sudo apt-get install binutils
dpkg -L binutils

$ человек как

...