我正在使用Ubuntu,我正在为Linux寻找汇编编译器,我发现了GAS。
我正在尝试安装并运行它,但我不能。
答案 0 :(得分:15)
as
是GNU Assembler。它位于binutils
,但如果你这样做:
sudo apt-get install build-essential
您将获得gas
以及gcc
(默认使用gas
进行后端汇编)。
有关使用gas
的“教程”,您可能希望阅读使用它的Programming From the Ground Up。
从.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}"
如果要与库链接,在从asm源文件构建可执行文件时,通常最简单的方法是让gcc使用as
和ld
的正确命令行选项。
如果gcc foo.s -o foo
定义了foo.s
功能,则main
将有效。
还相关:Assembling 32-bit binaries on a 64-bit system (GNU toolchain)如果您在x86-64系统上编写32位程序。
答案 1 :(得分:4)
它位于binutils
包中。
答案 2 :(得分:4)
启动Synaptic并在快速搜索栏中输入“gnu assembler”。很明显,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'.
答案 3 :(得分:0)
您是否阅读过http://www.faqs.org/docs/Linux-HOWTO/Assembly-HOWTO.html? Debian GAS包含在包
中的binutils
所以
sudo apt-get install binutils
dpkg -L binutils
$ man as
答案 4 :(得分: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
TODO:如何配置as
特定选项?我们使用了./configure
顶层的binutils-gdb
,但是它包含多个项目的选项,例如我相信的gdb
,而不是as
的特定项目?
在Ubuntu 18.04上测试。