1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
.set noreorder
.weak _init
.weak _fini
.global __start
.global _start
__start:
_start:
subu $fp, $fp, $fp # Zero the frame pointer.
lui $gp, %hi(_gp)
addi $gp, %lo(_gp)
#la $gp, _gp
lw $4, %call16(main)($gp) # Get main() ...
lw $5, ($sp) # Get argc...
addu $6, $sp, 4 # and argv ...
lw $7, %call16(_init)($gp) # and _init() ...
addi $sp, $sp, -4*6 # Leave space for arguments 0..3, arg4, and arg5.
lw $12, %call16(_fini)($gp) # and _fini() ...
sw $12, 4*4($sp) # Save arg4.
sw $0, 4*5($sp) # ldso_fini == NULL
lw $25, %call16(__libc_start_main)($gp)
jalr $25 # Let's go!
nop
b . # Never gets here.
nop
|