2016-02-29 104 views
0

我在窃听一个需要主机应用程序允许可执行堆栈的插件。在运行时查询execstack

这可以通过运行

execstack -s /path/to/my/host 

但是,如果主机应用程序缺乏可执行堆栈标志(如上面的命令没有被调用)来实现,运行我的插件只是崩溃主机:

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

我想避免碰撞,例如,如果可执行堆栈滞后是而不是集合,通过禁用我的代码的部分自动。

的检查应该在插件初始化

但是在运行时发生的,我还没有找到如何在运行时检测可执行堆栈的可用性(没有崩溃)的任何文件。

到目前为止,我发现的唯一的东西是execstack -q /path/to/my/host,但是从/ path/to/my/host加载的插件中看起来很乱。

回答

0

所以似乎没有更好的解决我的问题比查询在运行时的保护方案:明确地旗内存是可执行文件,使用

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

这主要增加了一个例外executable stack protection在明确定义的内存区域。