x86架构的一个瑕疵–可执行保护

很久以前,曾经写过一篇关于如何保护栈不可执行的文章《栈的保护--windows和linux》,文章的最后谈到了一种很好的方式,就是不用段式保护机制而使用页式保护机制,在页表项中做文章,但是这种方式有一个前提就是页表项必须支持可执行位,传统的x86 是不支持的,也就是说传统的x86处理器仅仅支持读写保护,不支持可执行保护,这么说来如果不用段式保护,纯粹的页式保护是不可能做到保护数据不可执行的。很多文档上说段式机制已经成了鸡肋,纯粹是为了兼容而保留的,现在看来为了实现不可执行保护必须用段式机制,我不知道这是不是x86架构的缺陷,在 linux的源代码中,有下列定义:

#define _PAGE_NX (1ULL<<_PAGE_BIT_NX)

#else

#define _PAGE_NX 0

#endif

#define PAGE_SHARED_EXEC /

__pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED)

#define PAGE_COPY_NOEXEC /

__pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_NX)

可以看出,传统的x86处理器是不支持NX位的,但是看看PPC,是支持的。因此x86处理器下的个人PC会危机重重,更严重的是一片混乱,代码中到处挂钩子而没有什么好的底层机制可以禁止,不管是病毒还是安全软件本身都是都采用了一些不太雅观的方式,也许是以暴制暴吧,另外仅仅由于页表项没有支持NX位,这样就多了几种缓冲区溢出的方式,可是正是由于x86的这种乱七八糟的松散设计才使得很多安全厂商得以生存,因为它们和恶意代码在同一条船上。

原文链接: https://blog.csdn.net/dog250/article/details/5302885

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    x86架构的一个瑕疵--可执行保护

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/410623

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年4月26日 下午12:08
下一篇 2023年4月26日 下午12:08

相关推荐