.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