我正在攻击一个插件,要求主机应用程序允许可执行堆栈。
这可以通过运行
来实现execstack -s /path/to/my/host
但是,如果主机应用程序缺少可执行堆栈标志(例如,尚未调用上述命令),则运行我的插件只会导致主机崩溃:
编程接收信号SIGSEGV,分段故障。
我想避免崩溃,例如如果可执行堆栈滞后未设置,则自动禁用部分代码。
检查应该在插件初始化期间在运行时进行
但是,我还没有找到任何关于如何在运行时检测可执行堆栈的可用性的文档(没有崩溃)。
到目前为止我唯一发现的是execstack -q /path/to/my/host
,但从/ path / to / my / host加载的插件中运行起来似乎很麻烦。
答案 0 :(得分:0)
所以似乎比我在运行时查询保护方案更能解决我的问题:使用
明确标记可执行的内存int mprotect(void *addr, size_t len, int prot);
这基本上在明确定义的内存区域中为executable stack protection
添加了一个例外。