1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #include <as-layout.h>
- .section .__syscall_stub, "ax"
- .globl batch_syscall_stub
- batch_syscall_stub:
- mov $(STUB_DATA), %rbx
- /* load pointer to first operation */
- mov %rbx, %rsp
- add $0x10, %rsp
- again:
- /* load length of additional data */
- mov 0x0(%rsp), %rax
- /* if(length == 0) : end of list */
- /* write possible 0 to header */
- mov %rax, 8(%rbx)
- cmp $0, %rax
- jz done
- /* save current pointer */
- mov %rsp, 8(%rbx)
- /* skip additional data */
- add %rax, %rsp
- /* load syscall-# */
- pop %rax
- /* load syscall params */
- pop %rdi
- pop %rsi
- pop %rdx
- pop %r10
- pop %r8
- pop %r9
- /* execute syscall */
- syscall
- /* check return value */
- pop %rcx
- cmp %rcx, %rax
- je again
- done:
- /* save return value */
- mov %rax, (%rbx)
- /* stop */
- int3
|