库函数与系统调用

介绍pwn中常见的libc函数

库函数与系统调用

atoi()

标准库函数

ASCII to Integer
将字符串转换为对应的整数值

1
int atoi(const char* str);

read()

系统调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ssize_t read(int fd, void* buf, size_t count);

这样,你可以在程序运行时动态地分析 **glibc** 中的函数调用和行为。

### 5. **查看已经安装的库路径**

如果你对已经安装的 **glibc** 二进制文件中的实现感兴趣,虽然不能直接看到源代码,但可以使用工具来反汇编并分析其二进制```

---
# mmap()
`mmap`是一个用于内存映射的系统调用函数,在Linux和Unix-like系统中非常常见。它允许将一个文件或其他对象(设备、内存等)映射到进程的虚拟内存空间
可以通过
指针直接访问文件内容,无需读取和写入文件
```c
void* mmap(void* addr, size_t length, int flags, int fd, off_t offset);

addr:建议的映射地址。如果传入NULL,操作系统会自动选择映射的地址
length:映射区域的长度,单位是字节
prot:指定映射区域的访问权限,通常是以下几个值的组合:

  • PROT_READ:页可以被读取
  • PROT_WRITE:页可以被写入
  • PROT_EXEC:页可以被执行
  • PROT_NONE:页不能被访问
    flags:映射的特性和行为,常见的值有:
  • MAP_SHARED:修改同步到文件或设备,适用于共享内存
  • MAP_PRIVATE:修改不会影响文件或设备,而是创建一个映射的副本,适用于私有内存
  • MAP_FIXED:如果映射地址已经有映射区域,它会被替换
  • MAP_ANONYMOUS:映射不与任何文件关联,通常用于申请匿名内存,fd必须为-1,offset也必须为0
  • fd:文件描述符,指向需要映射的文件。如果映射匿名内存,传入-1
  • offset:文件偏移量,表示映射内容在文件中的起始位置,映射必须是页大小的整数倍。

阅读glibc源代码

通过libc库文件本身,无法直接查看其源代码。
libc文件(libc.solibc.so.6)是已经编译好的共享库,它们包含了库的二进制实现。


库函数与系统调用
http://example.com/2024/12/07/libc/
作者
yvyvSunlight
发布于
2024年12月7日
许可协议