有没有办法找出哪些匿名虚拟内存区域是由libc创建/访问的?哪些匿名区域是由libc创建/访问的?
我有一个程序,其地址空间mprotect
秒VMAs。 但是当mprotect
是一个将被libc访问的区域时,会发生SIGSEGV。不幸的是,我安装的信号处理程序只处理我的代码发生的错误,而不是libc。
详细地说,我得到的错误是因为printf
使用可变参数。它试图访问位于va_list
结构内的reg_save_area
的位置。那个位置属于一个匿名的VMA,我之前有mprotect
ed。
那么,有没有一个知道哪些是我以前的这些区域mprotect
呢?或者至少有一种方法可以知道stdarg.h
选择放置在哪里reg_save_area
?
最简洁的方法是处理libc中发生的SIGSEGV。 但我怀疑是否有这样的方式。
注意: libc的data/bss段可以很容易地识别,因为它不是匿名的。如果我mprotect
那VMA太,它也会导致一个未处理的SIGSEGV,这就是我为什么不选择。
谢谢。好主意。但是,目前我正在尝试其他可能的工作。稍后我会提供更新! – Paschalis
@Paschalis你正在做的是向你的汽车发动机发射霰弹枪,然后询问互联网在哪里瞄准,以便它不会着火。正确的答案不是告诉你在哪里瞄准,而是告诉你停止用霰弹枪射击你的发动机。 – Art
是的,这正是它的样子,除非你知道我这样做的原因! ;) – Paschalis