1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
global _start
; NOTE: assumes program loader has put argc, argv, envc, envp on stack
section .text
_start:
xor rbp,rbp ; base pointer undefined: set to 0
mov r9,rdx ; 6th arg: function to register with atexit()
pop rsi ; 2nd arg: argc
mov rdx,rsp ; 3rd arg: argv
and rsp,$-16 ; align stack pointer to 16 bytes
mov $_fini,r8 ; 5th arg: fini
mov $_init,rcx ; 4th arg: init
mov $main,rdi ; 1st arg: main
call rtยทboot ; int boot(
; int(*main)(int,char*[],char*[]),
; int argc,
; char *argv[],
; init, fini, atexit);
.loop: jmp .loop ; should never reach...
|