30 lines
609 B
ArmAsm
30 lines
609 B
ArmAsm
#include <sys/linux-syscalls.h>
|
|
|
|
#ifndef __NR_vfork
|
|
#define __NR_vfork 190
|
|
#endif
|
|
|
|
|
|
.text
|
|
.type vfork, @function
|
|
.globl vfork
|
|
.align 4
|
|
|
|
/* Get rid of the stack modifications (popl/ret) after vfork() success.
|
|
* vfork is VERY sneaky. One has to be very careful about what can be done
|
|
* between a successful vfork and a a subsequent execve()
|
|
*/
|
|
|
|
vfork:
|
|
/* grab the return address */
|
|
popl %ecx
|
|
movl $__NR_vfork, %eax
|
|
int $0x80
|
|
cmpl $-129, %eax
|
|
jb 1f
|
|
negl %eax
|
|
pushl %eax
|
|
call __set_errno
|
|
orl $-1, %eax
|
|
1:
|
|
jmp *%ecx
|