0%

Solaris 系统的DTrace是动态跟踪,动态调试技术的鼻祖,很多系统都有dtrace,比如Windows,macOS等。它是常驻在内核中的,通过用户执行的dtrace命令,把由D语言编写的脚本,提交到内核中的运行时执行。但是DTrace本身无法在linux中运行。于是大家开始尝试将DTrace移植到Linux,或者说让Linux也拥有像dtrace这样强大的动态调试工具,其中最著名的就是RedHat的SystemTap。

阅读全文 »

栈溢出的基本原理以及shellcode利用可以查看我的上一篇文章——栈溢出之shellcode

栈溢出缓解措施介绍

栈地址随机化(攻击者不知道shellcode的地址,无法构造return address):ASLR(地址空间随机化)、PIE(地址无关可执行文件)

检测栈溢出,并报错退出:Stack Canary/Cookie

栈不可执行:NX(不执行)/DEP(数据执行保护)

阅读全文 »

栈溢出(stack overflow)原理

程序被载入系统(开始运行)时,系统会分配给程序一段内存供程序保存信息以及使用。这段内存包含有多个区域,比如代码区,全局数据区,动态链接库区,堆区,栈区等等。栈区是用来存储程序的局部信息,保存了程序调用函数的运行时状态信息,比如函数参数、局部变量等。函数外部定义的变量在全局数据区,而程序运行过程中动态分配的内存,如使用malloc()、new()等函数分配的内存,都位于堆区。

阅读全文 »

链接

在程序从源代码到生成最终的可执行程序,会大体经历编译、汇编、链接三个阶段。编译将源代码转换成为汇编语言(例如.s后缀的文件),汇编阶段将汇编语言转换成机器码(例如.o文件)。链接阶段会合并多个目标文件(上一阶段生成的.o)以及静(动)态链接库中的代码数据等信息,修复文件之间的引用关系,最后生成可执行程序。

阅读全文 »

翻译自 Jonathan Levin’s site   原文链接:http://newosxbook.com/articles/MemoryPressure.html

About

OS X 和 iOS 中的内存压力是虚拟内存管理的一个非常重要的方面,在我的书中[1]已经有了一些介绍。 我提到的 Jetsam/memorystatus 机制,已经随着时间的推移发生了重大变化,最终形成了最近在 Mavericks 中引入的一些非常重要的系统机制和系统调用。 在使用我的 OS X 和 iOS 的Process Explorer 时,我遇到了这些新增加的问题,因此在这里记录。 这是作为本书第12章的补充,当然也可以单独阅读。

阅读全文 »