Linux内核调试(1)
本文介绍了Linux内核调试的基本流程,包括源码获取、内核编译、文件系统镜像加载、QEMU启动以及GDB调试。通过关闭内核地址随机化(KASLR)和开启调试信息,确保内核可调试性。文章详细描述了如何使用syzkaller生成文件系统镜像,并通过QEMU启动虚拟机进行调试。最后,通过GDB远程连接到虚拟机内核,完成断点设置和调试操作
387 words
|
2 minutes
fork()系统调用的“一次调用和两次返回”
本文分析了fork()系统调用的“一次调用和两次返回”现象。fork()用于创建子进程,父子进程共享代码,但通过写时拷贝技术避免完全复制内存。调用fork()后,内核完成内存分配、数据结构复制、进程列表更新及调度操作。父进程返回子进程的PID以便管理子进程,子进程返回0表示自身无子进程。深入内核代码可发现,fork()通过copy_process()和copy_thread()函数分别设置父子进程的返回值,确保进程间通信和调度的正确性。
786 words
|
4 minutes
堆基础知识
2025-03-19
本文介绍了堆的基础知识,包括堆管理结构arena、内存块chunk的结构与分类,以及堆分配与释放的机制。文章详细描述了chunk的类型(如allocated chunk、top chunk)及其在堆中的管理方式,并分析了bin的分类(如fastbin、smallbin、largebin、unsorted bin)及其存储和分配策略。通过对堆内存管理的深入解析,帮助读者理解堆的工作原理及其在程序运行中的作用。
1061 words
|
5 minutes