段权限保护与buffer overflow

"buffer overflow... possibly execute arbitrary code",安全公告中这样的话语简直就像“Ladies and Gentlemen"一样成了必备的开场白。但是我最近读intel手册的时候发现
1、intel强制程序必须分段
2、在GDT/LDT中,每个段都有rwx的访问权限控制。
我在看freebsd的loader的btx kernel代码时发现,所有的数据段都是不可执行的,而所有的代码段都是不可写的。于是,即便发生了溢出(不管是stack还是heap),那都不会导致执行攻击者的任意代码。
但貌似微软根本就没有在windows中使用这个功能,而是通过页面来进行权限管理。但是至少据我测试,从堆上执行代码是完全可以的。why?

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥