本来想写,不过现在越来越说不清自己为什么会写代码和改代码了,不过还是写的还是不太好,许多地方需要改进。继续一些系统低层相关的阅读
前几天看了Reverse Engineering Code with IDA Pro。觉得前面的章节还是有很大帮助,简单提取其中的一些内容写在下面
1.stack and chunk
一般来说栈有压栈和出栈的操作,当进入某个函数先压入参数,返回地址,保存的EBP地址,这里返回地址为ebp+04h。
其他也相同,函数局部变量按照栈增长方向,栈由高地址向低地址。
push ebp
mov ebp, esp
利用esp的偏移来访问各个参数和局部变量,而且栈的分配比较固定,一旦超出大小就直接抛出异常。
当使用类似于malloc的内存函数,会返回一个上图mem位置的指针。同时为了防止内存分配和重分配的开销较大,通常会设立一个cach机制,通常cach会来自前次free的链表中。
还有一种glibc的自由内存堆分配如上所有,功能返回的指针在mem位置,不过感觉比较少见。