Linux 栈耗尽



进程是操作系统进行资源分配的基本单位,线程是CPU进行调度和分派的基本单位。我们通常意义下的进程包括:由二进制代码组成的应用程序、单线程、分配给该应用程序的一组资源(如内存、文件等),栈在wikipedia上叫callstack调用栈,并不是孤立的有进程栈这个说法,线程也有栈,不过大多时间是共享父进程分配的堆内存空间。无论是线程栈还是进程栈,都有一定的大小,空间耗尽将会触发Segment Fault。

Continue reading

Proc File System



在许多类 Unix 计算机系统中, procfs 是 进程 文件系统 (file system) 的缩写,包含一个伪文件系统(启动时动态生成的文件系统),用于通过内核访问进程信息。这个文件系统通常被挂载到 /proc 目录。由于 /proc 不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。 其中对我们一般作用最大的是/proc/PID问价夹的内容。
它广泛用在Solaris,BSD,Linux等操作系统中

Continue reading

Environ



在linux应用程序运行时,内存的最高端是环境/参数节(environment/arguments section)
用来存储系统环境变量的一份复制文件,进程在运行时可能需要。
例如,运行中的进程,可以通过环境变量来访问路径、shell 名称、主机名等信息。
该节是可写的,因此在格式串(format string)和缓冲区溢出(buffer overflow)攻击中都可以攻击该节。
*environ指针指向栈地址(环境变量位置),有时它也成为攻击的对象,泄露栈地址,篡改栈空间地址,进而劫持控制流。

Continue reading

Strip

最近在学习ptmalloc,对于malloc中许多需要注意深入的地方,要用到gdb调试,但是gdb在调试进入到glibc so库中就"瞎"掉了
我废了挺大的力气配置gdb,让它能够源码级别调试malloc,但是对于libc.so.dbg是什么,为什么需要它却不太理解,其实这就涉及到了Strip。

Continue reading