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