在运行时查询 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
添加了一个例外。
我正在破解一个插件,该插件需要主机应用程序允许 可执行堆栈。
这可以通过运行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
添加了一个例外。