Я пишу инструмент трассировки, который должен иметь дело с выводом JIT, так что стек может иногда выглядеть довольно странно. Я хотел бы попытаться применить некоторые эвристики к адресам, чтобы определить, являются ли они кодом, данными или мусором. (Если я иногда ошибаюсь, это не имеет большого значения; однако, если процесс не работает, не так уж и много.)
Я могу cat /proc/«pid»/maps
получить список отображений виртуальных машин для процесса в Linux. Можно ли получить доступ к этой информации (или любому подмножеству) изнутри процесса, не анализируя этот файл? Было бы идеально проверить адрес rwx
. По сути, я хочу «прочитать» версию mprotect(2)
.
Если я не могу этого сделать, как насчет того, чтобы определить, вызовет ли доступ к определенному адресу ошибку сегментации? (В этом случае уже установлен обработчик SIGSEGV
, и я не могу его легко перезаписать, иначе я бы просто сделал это.)