传统Int 0x80系统调用
系统调用号:EAX
参数:EBX、ECX、EDX、ESI、EDI、EBP
返回值:EAX
具体功能号在 unistd_32.h 文件中
64位系统调用syscall
系统调用号:RAX
参数:RDI、RSI、RDX、R10、R8、R9
返回值:RAX
具体功能号在 unistd_64.h 文件中
在pwn中一般是使用 sys_execve 系统调用来获取shell的。
sys_execve需要以下参数: 资料来自 syscalls.kernelgrok.com
char __user *
char __user *__user *
char __user *__user *
struct pt_regs *
第一个参数就是要传入的命令
32位情况下:
#define __NR_execve 11
调用示例:
.intel_syntax noprefix
.text
.globl main
.type main, @function
main:
.LFB0:
push ebp
mov ebp, esp
// /bin/sh
push 0x0068732f
push 0x6e69622f
mov ebx,esp
mov eax,0x0b
mov ecx,0
mov edx,0
int 0x80
mov e