ASM code
PROT_READ equ 1
PROT_WRITE equ 2
PROT_EXEC equ 4
PROT_NONE equ 0
MAP_SHARED equ 1
MAP_PRIVATE equ 2
MAP_FIXED equ 10h
MAP_TYPE equ 0Fh
MAP_FILE equ 0
MAP_ANON equ 20h
MAP_ANONYMOUS equ MAP_ANON
MAP_32BIT equ 40h
MAP_NORESERVE equ 4000h
MAP_GROWSDOWN equ 0100h
MAP_DENYWRITE equ 0800h
MAP_EXECUTABLE equ 1000h
MAP_LOCKED equ 2000h
MAP_POPULATE equ 8000h
MAP_NONBLOCK equ 10000h
MAP_STACK equ 20000h
MAP_HUGETLB equ 40000h
CLONE_VM equ 00000100h
CLONE_FS equ 00000200h
CLONE_FILES equ 00000400h
CLONE_SIGHAND equ 00000800h
CLONE_PTRACE equ 00002000h
CLONE_VFORK equ 00004000h
CLONE_PARENT equ 00008000h
CLONE_THREAD equ 00010000h
CLONE_NEWNS equ 00020000h
CLONE_SYSVSEM equ 00040000h
CLONE_SETTLS equ 00080000h
CLONE_PARENT_SETTID equ 00100000h
CLONE_CHILD_CLEARTID equ 00200000h
CLONE_DETACHED equ 00400000h
CLONE_UNTRACED equ 00800000h
CLONE_CHILD_SETTID equ 01000000h
CLONE_NEWUTS equ 04000000h
CLONE_NEWIPC equ 08000000h
CLONE_NEWUSER equ 10000000h
CLONE_NEWPID equ 20000000h
CLONE_NEWNET equ 40000000h
CLONE_IO equ 80000000h
SIGCHLD equ 17
stdout equ 1
STACK_SIZE equ 1024 * 200
.data
msg0 db 10, "thread created", 10
.code
_start:
main proc
mov rdi, 0
mov rsi, 4095
mov rdx, PROT_WRITE or PROT_READ
mov r10, MAP_ANONYMOUS or MAP_PRIVATE or MAP_GROWSDOWN
mov r8, -1
mov r9, 0
mov rax, 9 ; mmap
syscall
lea rdi, [thread]
lea rsi, [rax + STACK_SIZE - 8]
mov rdx, SIGCHLD or CLONE_FS or CLONE_FILES or CLONE_SIGHAND or CLONE_VM
mov r10, 0
mov rax, 56 ; clone
syscall
jmp $
main endp
thread proc
mov rdi, stdout
mov rsi, offset msg0
mov rdx, sizeof msg0
mov rax, 1 ; SYS_WRITE
syscall
mov rax, 0
ret
thread endp
end
Its not working return oxffffffffffffffea
after call clone