어셈블리 언어를 배우고 싶지만 인터넷 검색은 아무 의미가 없습니다. 나는 일부를 얻었고 Exec format error
심지어 wine
이해하는데 도움이 되지 않는 그것을 사용했습니다. 그래서 명령줄 어셈블러가 x86-64
구조적으로 어떤 일을 하는지, 그리고 Linux용 hello world 예제를 알려줄 수 있는 사람이 있는지 궁금합니다 .
답변1
다음을 포함하여 다양한 어셈블러를 사용할 수 있습니다.
gas
(GCC의 일부binutils
이며 지원됨) - 이는 어디에서나 사용할 수 있으며 AT&T 스타일을 사용합니다.- NASM(배포판에서 패키지를 찾으십시오
nasm
.) - 이는 Intel 스타일 니모닉을 지원합니다. - 야즘이는 NASM(패키지 찾기
yasm
)을 다시 작성한 것입니다. - 파심, 플랫 어셈블러.
이것은 "Hello world"입니다 gas
:
.global _start
.text
_start:
mov $1, %rax
mov $1, %rdi
mov $hello, %rsi
mov $13, %rdx
syscall
mov $60, %rax
xor %rdi, %rdi
syscall
hello:
.ascii "Hello, world\n"
에 저장 hello.S
하고 build it 을 사용하세요 gcc -c hello.S && ld -o hello hello.o
.
NASM에 해당하는 내용은 다음과 같습니다.
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, hello
mov rdx, len
syscall
mov rax, 60
xor rdi, rdi
syscall
hello db "Hello, world",0x0A
len equ $ - hello
다른 이름으로 저장 hello.asm
하고 를 사용하여 빌드합니다 nasm -felf64 hello.asm && ld -o hello hello.o
.
답변2
NASM은 Linux/Unix용 훌륭한 어셈블러입니다. Google에서 NASM 64비트 코드의 수많은 예를 찾을 수 있습니다.
Centos의 경우 다음 명령을 사용하여 NASM을 설치할 수 있습니다.
yum install nasm -y
데비안/우분투의 경우 다음과 같을 수 있습니다:
apt-get install nasm
답변3
SASM
파일을 편집합니다.
$ apt-get install sasm
NASM
파일을 컴파일합니다.
$ apt-get install nasm