12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include "as-layout.h"
- .globl syscall_stub
- .section .__syscall_stub, "ax"
- .globl batch_syscall_stub
- batch_syscall_stub:
- /* load pointer to first operation */
- mov $(STUB_DATA+8), %esp
- again:
- /* load length of additional data */
- mov 0x0(%esp), %eax
- /* if(length == 0) : end of list */
- /* write possible 0 to header */
- mov %eax, STUB_DATA+4
- cmpl $0, %eax
- jz done
- /* save current pointer */
- mov %esp, STUB_DATA+4
- /* skip additional data */
- add %eax, %esp
- /* load syscall-# */
- pop %eax
- /* load syscall params */
- pop %ebx
- pop %ecx
- pop %edx
- pop %esi
- pop %edi
- pop %ebp
- /* execute syscall */
- int $0x80
- /* check return value */
- pop %ebx
- cmp %ebx, %eax
- je again
- done:
- /* save return value */
- mov %eax, STUB_DATA
- /* stop */
- int3
|