Linux. create thread in assembler

445 Views Asked by At

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

0

There are 0 best solutions below