Я хотел знать, является ли инструкция из пользовательского пространства или из кода библиотеки.
Вы смущены: оба код библиотеки и основной исполняемый код * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Linux x86_64
В Linux *1011* вы можете отличить адреса ядра от адресов пространства пользователя, потому что в текущих (48-битных) реализациях адреса ядра находятся в диапазоне от FFFF8000'00000000
до FFFFFFFF'FFFFFFFF
,См. Описание адреса канонической формы здесь .
Я заметил, что некоторые коды / данные приложения расположены примерно в 0x000055xxxx, в то время как библиотеки и области mmaped по умолчанию расположены в 0x00007fcxxxx. Могу ли я использовать, например, 0x00007f00 ... 00 в качестве границы, чтобы указать инструкцию от самого приложения или из библиотеки?
Нет, в общем, вы не можете. Приложение может быть привязано к загрузке в любом месте в каноническом адресном пространстве (хотя большинство приложений этого не делают).
Как уже ответил Бэйзил Старынкевич, вам нужно проанализировать /proc/$pid/maps
, илизнать, по какому адресу загружен исполняемый файл (для двоичного файла без PIE).