![PWN小速查 | PWN Notebook](/images/article_images/myfirstpwn/cover.png)
PWN小速查 | PWN Notebook
![](/images/avatar.jpg)
PWN小小速查 | PWN Notebook
一些记不住的琐碎小事,做题经常会用,放这里方便做题的时候对着看
系统调用速查 [System call]
SYSCALL的定义/原理
System Call是操作系统向用户空间程序提供的一组函数或接口,用于访问操作系统内核的功能和资源。通过System Call,应用程序可以请求操作系统完成诸如文件操作、内存管理、进程管理、网络通信等操作,从而实现对计算机系统的控制与利用。
System Call的实现原理涉及操作系统内核的设计和底层机制。通常,当应用程序发起System Call请求时,会触发以下过程:
1. 用户空间程序通过特定指令(Linux:x86为int 0x80
, x86-64为syscall
指令)将控制权转交给内核;
2. 内核根据指定的System Call编号进入相应的内核函数,并执行相关操作;
3. 内核将结果返回给用户空间程序,并将控制权返还给应用程序。
SYSCALL传参
64位:
系统调用号:rax寄存器
参数寄存器:
- rdi
- rsi
- rdx
- r10
- r8
- r9
- 第七个参数及之后通过栈传递
返回值:rax
32位:
系统调用号:eax寄存器
参数寄存器:
- ebx
- ecx
- edx
- esi
- edi
- 第六个参数及之后通过栈传递
返回值:eax
常用系统调用号
调用号 | 调用指令 | 参数1 | 参数2 | 参数3 | 备注 |
---|---|---|---|---|---|
0 | read | uint fd (0 for stdin) |
char * buf | size_t count | ORW |
1 | write | uint fd (1 for stdout) |
char * buf | size_t count | ORW |
2 | open | char * filename (“/flag”) |
int oflags (0) |
int mode (0) |
ORW |
59 | execve | char * bin (“/bin/sh”) |
char * const argv[] (0) |
char * env[] (0) |
getshell 常用 |
System V AMD64 ABI参数传递 [Linux Func Call]
Linux 下的调用约定叫做 “System V AMD64 ABI”,此约定主要在 Solaris,GNU/Linux,FreeBSD 和其他非微软OS上使用.
Linux 的 x64 下也只有一种函数调用约定,即 __fastcall ,其他调用约定的关键字会被忽略,也就是说 ABI 只有 __fastcall.
参数顺序:
- RDI
- RSI
- RDX
- RCX
- R8
- R9
- 第7个参数及往后压入栈中
Tips: 32位下linux传参直接压入栈中而不使用寄存器
///施工中///
- 标题: PWN小速查 | PWN Notebook
- 作者: Atomic
- 创建于 : 2024-09-19 09:00:00
- 更新于 : 2024-09-23 12:38:51
- 链接: https://blog.atom1c.icu/2024/09/19/Pwn-notebook/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。