一些常用函数的调用总结
Read 函数
read 函数:ssize_t read(int fd, void *buf, size_t count)。
read(0, …):从“标准输入”读取 (STDIN)
- 0 是 Standard Input (标准输入) 的宏定义(在 C 语言里叫 STDIN_FILENO)。
- 调用 read(0, buffer, size) 时,程序会暂停运行,等待用户在键盘上敲击字符并按下回车键。它和 C 语言里的 scanf 或者 getchar 底层是同一个数据来源。
read(fd, …):从“自定义文件/设备”读取
- 这里的 fd 是一个变量。当你使用 open() 函数打开一个普通文本文件、一个网络套接字 (Socket) 或者一个硬件设备时,系统会返回一个大于 2 的整数(比如 3, 4 , 5…)赋值给这个 fd。
- 指向你刚刚打开的那个具体目标。
- 只要你在 open() 的时候指定了包含读取的权限(比如 O_RDONLY 或 O_RDWR),read(fd, …) 就会顺畅地从那个文件或网络连接里把数据拉取到你的内存(buffer)中。
Mprotect 函数
1 |
|
- addr (内存起始地址): 这是你要修改权限的内存的起始地址。
- 这个地址必须是按页对齐的。在大多数 64 位 Linux 系统中,一页的大小是 4KB(即 4096 字节,十六进制表示为 0x1000)。这就意味着传入的 addr 地址的最后三个十六进制数字必须是 000(例如 0x7ffff7a34000)。如果不对齐,函数会直接调用失败。
- len (长度): 你想修改多长的一段内存区域。通常建议也设置为页大小(0x1000)的整数倍。
- prot (权限标志): 这是你想要赋予这段内存的新权限。它是通过几个常量的按位或(位掩码)来组合的。
- PROT_NONE (0):毫无权限(不能读、不能写、不能执行)。
- PROT_READ (1):可读; 二进制:001
- PROT_WRITE (2):可写;二进制:010
- PROT_EXEC (4):可执行;二进制:100
所以:
- 3 =
PROT_READ+PROT_WRITE= 可读可写 (RW) - 5 =
PROT_READ+PROT_EXEC= 可读可执行 (RX) - 7 =
PROT_READ+PROT_WRITE+PROT_EXEC= 可读可写可执行 (RWX,极其危险的权限,
更新: 2026-04-14 12:12:36
原文: https://www.yuque.com/idcm/wnemg9/pbcgf8c10h4bgptr