如果想在另外的进程上下文内创建子进程 nop nop nop nop nop nop mov $0x2, %eax # fork系统调用 int $0x80 # 系统调用中断 cmp $0x00, %eax # 是否返回值是0 jne fork_finished # 因为eax不是零,表明是父进程 push %ebx # 如果eax是零,子进程开始,将开始地址 call *%edi # 调用函数 mov $0x1, %eax # 系统调用exit int $0x80 # 退出子进程 fork_finished: int $0x3 nop 代码期望寄存器值: ebx = 传入函数的参数 edi = 子进程上下文中被调用函数的虚拟地址 如果想在另外进程里创建线程: 首先注入libpthread.so到进程中 寻找pthread_create的虚拟地址 申请和复制用户定义代码 执行转移到桩代码来创建线程 nop nop nop nop nop nop sub $0x4, %esp # 空间id mov %esp, %ebp # 保存esp到ebp压栈 push %ebx # 参数压栈 push %eax # 函数压栈 push $0x0 # 没有属性 push %ebp # 压栈保存进程id的地址 call *%edi # 调用pthread_create add $0x14, %esp # 恢复栈 int $0x3 # 断点 nop 函数跳转: