Компиляция / запуск ассемблера в Linux?
Я довольно новичок в Linux (Ubuntu 10.04) и полный новичок в ассемблере. Я следил за некоторыми учебниками, и я не мог найти ничего конкретного для Linux.
Итак, мой вопрос, Что такое хороший пакет для компиляции/запуска ассемблера и какие команды для компиляции/запуска этого пакета?
7 ответов:
ассемблер GNU (gas) и NASM являются хорошим выбором. Однако у них есть некоторые различия, большой из которых-порядок, в котором вы размещаете операции и их операнды.
газ использует синтаксис AT&T:
mnemonic source, destinationnasm использует стиль intel:
mnemonic destination, sourceлюбой из них, вероятно, сделает то, что вам нужно.
попробуйте этот учебник:http://asm.sourceforge.net/intro/Assembly-Intro.html
ассемблер GNU, вероятно, уже установлен в вашей системе. Попробуй
man asчтобы увидеть полную информацию об использовании. Вы можете использоватьasдля компиляции отдельных файлов и ЛД по ссылке, Если вы действительно, действительно хотите.тем не менее, GCC делает отличный интерфейс. Он может собрать .s файлов для вас. Например:
$ cat >hello.s <<EOF .data .globl hello hello: .string "Hello, world!" .text .global main main: pushq %rbp movq %rsp, %rbp movq $hello, %rdi call puts movq , %rax leave ret EOF $ gcc hello.s -o hello $ ./hello Hello, world!код выше AMD64. Это было бы по-другому, если вы все еще находитесь на 32-разрядной машине.
вы также можете скомпилировать код C/C++ непосредственно в сборку, если вам интересно, как что-то работает:
$ cat >hello.c <<EOF #include <stdio.h> int main(void) { printf("Hello, world!\n"); return 0; } EOF $ gcc -S hello.c -o hello.s
Если вы используете NASM, командная строка просто
nasm file.asm -o outfileгде файл'.asm '- это ваш файл сборки (код), а "outfile" - это исполняемый файл, который вы хотите.
вот еще немного информации:
http://www.nasm.us/doc/nasmdoc2.html#section-2.1
вы можете установить NASM в Ubuntu с помощью следующей команды:
apt-get install nasmвот основной Привет Мир в сборке Linux, чтобы подогреть ваш аппетит:
http://web.archive.org/web/20120822144129/http://www.cin.ufpe.br/~if817/arquivos/asmtut/index.html
Я надеюсь, это то, что вы просили...
существует также FASM для Linux.
format ELF executable segment readable executable start: mov eax, 4 mov ebx, 1 mov ecx, hello_msg mov edx, hello_size int 80h mov eax, 1 mov ebx, 0 int 80h segment readable writeable hello_msg db "Hello World!",10,0 hello_size = $-hello_msgэто комилы с
fasm hello.asm hello
мое предложение было бы получить книгу программирования с нуля:
http://nongnu.askapache.com/pgubook/ProgrammingGroundUp-1-0-booksize.pdf
Это очень хорошая отправная точка для входа в ассемблерное программирование под linux, и она объясняет много основ, которые вам нужно понять, чтобы начать работу.
Comments