12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- .text
- .globl _start
- .type _start,@function
- .p2align 4
- _start:
- xorl %ebp, %ebp
- #ifdef __LP64__
- popq %rdi
- movq %rsp, %rsi
- andq $~15, %rsp
- #elif defined __x86_64__
- mov (%rsp),%edi
- addl $4,%esp
- movl %esp, %esi
- andl $~15, %esp
- #else
- popl %esi
- movl %esp, %ecx
- andl $~15, %esp
- subl $8,%esp
- pushl %ecx
- pushl %esi
- #endif
- call main
- hlt
- .type syscall, @function
- .globl syscall
- .p2align 4
- syscall:
- #ifdef __x86_64__
- movq %rdi, %rax /* Syscall number -> rax. */
- movq %rsi, %rdi /* shift arg1 - arg5. */
- movq %rdx, %rsi
- movq %rcx, %rdx
- movq %r8, %r10
- movq %r9, %r8
- movq 8(%rsp),%r9 /* arg6 is on the stack. */
- syscall /* Do the system call. */
- #else
- push %ebp
- push %edi
- push %esi
- push %ebx
- mov 0x2c(%esp),%ebp
- mov 0x28(%esp),%edi
- mov 0x24(%esp),%esi
- mov 0x20(%esp),%edx
- mov 0x1c(%esp),%ecx
- mov 0x18(%esp),%ebx
- mov 0x14(%esp),%eax
- int $0x80
- pop %ebx
- pop %esi
- pop %edi
- pop %ebp
- #endif
- ret /* Return to caller. */
- .size syscall, .-syscall
- .section .note.GNU-stack,"",@progbits
- .section ".note.gnu.property", "a"
- #ifdef __LP64__
- .p2align 3
- #else
- .p2align 2
- #endif
- .long 1f - 0f /* name length */
- .long 5f - 2f /* data length */
- .long 5 /* note type */
- 0: .asciz "GNU" /* vendor name */
- 1:
- #ifdef __LP64__
- .p2align 3
- #else
- .p2align 2
- #endif
- 2: .long 0xc0000002 /* pr_type. */
- .long 4f - 3f /* pr_datasz. */
- 3:
- .long 0x2
- 4:
- #ifdef __LP64__
- .p2align 3
- #else
- .p2align 2
- #endif
- 5:
|