NASM
Hello World
section .data
mygreeting db "hello world!"
len equ $ - mygreeting
section .text
global _start
_start:
mov rax, 1 ; write
mov rdi, 1 ; stdout
mov rsi, mygreeting
mov rdx, len
syscall
mov rax, 60 ; exit amd64
mov rdi, 0
syscall
Makra
Wyrównanie (ang. alignment) wskaźnika stosu:
; align to resolution (%1)
%macro ALIGN_STACK 1
; align
mov rdi, %1
sub rdi, 1
not rdi
and rsp, rdi
%endmacro
Wskazówki
Ucieczki w Stylu C
Aby użyć ‘\n’ jako koniec linii, trzeba otoczyć go backtikami, czyli
section .data
fmt db `hello %s\n\0`
Adresowanie względem Licznika programu
mov rax, [rel 0x1000]
Stos
Zmienne Lokalne
Najpierw trzeba zdefiniować macro lokalne dla kontekstu %$localsize
określający rozmiar ramy stosu:
some_func:
%push start_ctx
%assign %$localsize 0x40
%local i:DWORD
enter %$localsize, 0
// push $rbp; $rsp := $rbp - %$localsize;
mov DWORD [i], 0xdeadbeef
leave
%pop
Wskaźniki
Zamiast e.g.
add rax,QWORD PTR fs:0x0
w składni nasm mamy
add rax,QWORD [fs:0x0]
FEATURED TAGS
assembly
aws
boostrap
bpftrace
c
c++
clang
cloud
cmake
compilers
cryptography
css
dbus
debian
elf
gcc
gcov
gdb
ghidra
git
glibc
gnu
gpg
gui
http
javascript
jq
kernel
ld.so
linux
llvm
make
nasm
networking
node
npm
opengl
pam
pl
postgres
python
qt
reversing
shell
sql
sqlite
ssh
sudo
sysadmin
systemd
twilio
uftrace
usb
vim
virtualization
winapi
wireshark
www
x86
xml
xpath
zsh