どの匿名仮想メモリ領域が libc によって作成/アクセスされているかを調べる方法はありますか?
mprotect
アドレス空間で VMA を使用するプログラムがあります。ただし、mprotect
libc がアクセスする領域の場合は、SIGSEGV が発生します。残念ながら、私がインストールしたシグナル ハンドラーは、libc ではなく、私のコードで発生した障害のみを処理します。
詳細には、可変引数を使用しているため、私が得ている障害がありprintf
ます。構造reg_save_area
内にある場所にアクセスしようとします。その場所は、以前編集va_list
した匿名の VMA に属しています。mprotect
それで、私がそれらの領域である前に、これらの領域がどれであるかを知ることはありmprotect
ますか? または、少なくともstdarg.h
配置する場所を知る方法はありreg_save_area
ますか?
最もクリーンな方法は、libc 内で発生する SIGSEGV を処理することです。しかし、私はそのような方法があるとは思えません。
注: libc の data/bss セグメントは匿名ではないため、簡単に識別できます。私mprotect
もその VMA を使用すると、未処理の SIGSEGV が発生するため、そうしないことにしました。