星巡研究院

渗透视角下的C语言

``` #include <pwd.h> #include <stdio.h> int main(void) { struct passwd *p = getpwnam("root"); /* 打开并解析/etc/passwd,openat257+read0 */ if (p == NULL) { perror("getpwnam"); return 1; } printf("name=%s uid=%u shell=%s\n", p->pw_name, p->pw_uid, p->pw_shell); return 0; } ``` 链路:`getpwnam()` → glibc 置 `rax=257`(openat)以只读打开 `/etc/passwd`,置 `rax=0`(read)把文件内容读入缓冲,按冒号分隔解析出 `struct passwd` 后返回静态指针。文件关闭经 `close(3)`。因为文件全局可读,普通用户调用即可成功,不涉及提权。 ``` # 观察passwd的打开与读取 strace -e trace=open
这是进阶内容

升级理论包获取本册全部章节,从机器本质系统入门