在运行时查询 execstack



我正在破解一个插件,该插件要求主机应用程序允许可执行堆栈

这可以通过运行来实现

execstack -s /path/to/my/host

但是,如果主机应用程序缺少可执行堆栈标志(例如,尚未调用上述命令),则运行我的插件只会使主机崩溃:

程序接收信号SIGSEGV,分段错误。

我想避免崩溃,例如,如果未设置可执行堆栈滞后,则自动禁用部分代码。

检查应在插件初始化期间的运行时进行

但是,我还没有找到任何关于如何在运行时检测可执行堆栈的可用性(而不会崩溃)的文档。

到目前为止,我唯一发现的是 execstack -q /path/to/my/host ,但是从/path/to/my/host 加载的插件中运行似乎很笨拙。

所以似乎有比在运行时查询保护方案更好的解决方案:显式标记内存可执行,使用

int mprotect(void *addr, size_t len, int prot);

这基本上是向定义良好的内存区域中的executable stack protection添加异常。

最新更新