1#include <as-layout.h> 2 3 .globl syscall_stub 4.section .__syscall_stub, "ax" 5 6 .globl batch_syscall_stub 7batch_syscall_stub: 8 /* load pointer to first operation */ 9 mov $(STUB_DATA+8), %esp 10 11again: 12 /* load length of additional data */ 13 mov 0x0(%esp), %eax 14 15 /* if(length == 0) : end of list */ 16 /* write possible 0 to header */ 17 mov %eax, STUB_DATA+4 18 cmpl $0, %eax 19 jz done 20 21 /* save current pointer */ 22 mov %esp, STUB_DATA+4 23 24 /* skip additional data */ 25 add %eax, %esp 26 27 /* load syscall-# */ 28 pop %eax 29 30 /* load syscall params */ 31 pop %ebx 32 pop %ecx 33 pop %edx 34 pop %esi 35 pop %edi 36 pop %ebp 37 38 /* execute syscall */ 39 int $0x80 40 41 /* check return value */ 42 pop %ebx 43 cmp %ebx, %eax 44 je again 45 46done: 47 /* save return value */ 48 mov %eax, STUB_DATA 49 50 /* stop */ 51 int3 52