#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