在运行时查询 execstack

query execstack at runtime

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

这可以通过运行ning

来实现
execstack -s /path/to/my/host

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

Program received signal SIGSEGV, Segmentation fault.

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

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

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

到目前为止,我唯一发现的是 execstack -q /path/to/my/host,但在 /path/to/my/host.

加载的插件中,运行 似乎很老套

所以似乎有比在运行时查询保护方案更好的解决方案:使用

明确标记内存可执行
int mprotect(void *addr, size_t len, int prot);

这基本上是在明确定义的内存区域中向 executable stack protection 添加了一个例外。