【发布时间】:2014-06-30 15:34:28
【问题描述】:
我有一个程序,其中 argv[0] 不时被覆盖。这(仅)发生在我无法访问且无法使用调试器的生产机器上。为了找到这个损坏的根源,我想写保护这个堆栈页,这样任何写访问都会出错,我可以获得罪魁祸首指令的地址。
系统是基于 AIX 5.3 64 位的。当我尝试在我的堆栈页面上调用 mprotect 时,我收到一个 ENOMEM 错误。我正在使用 gcc 来生成我的程序。
在 Linux 系统(基于 x86)上,我可以使用 mprotect 轻松设置类似的保护。
有什么方法可以在 AIX 上实现这一点。或者这是一次没有希望的尝试?
【问题讨论】:
-
publib.boulder.ibm.com/infocenter/pseries/v5r3/index.jsp?topic=/… - 鉴于您似乎仅限于已映射的页面(以及其他一些内容),我怀疑您可以更改堆栈保护模式。 (但我对此不够熟悉,无法回答。)