В процессе пространства пользователя Linux, каков адрес страницы vsyscall? - PullRequest
0 голосов
/ 08 марта 2010

Я хотел бы получить адрес страницы vsyscall для своих собственных нужд. У меня есть только две идеи: изменить компилятор, чтобы хранить эту информацию в каком-то известном месте после ее передачи __start, или прочитать / proc / [pid] / maps. Я действительно не хочу читать / proc /, поскольку это медленно и не должно быть необходимым. Я также не хочу вносить изменения в компилятор. У кого-нибудь есть альтернатива? Есть ли символ, о котором я должен знать?

В тот момент, когда я испытываю желание вставить эту функцию в вызов ioctl в модуле, который я разработал в рамках этой работы!

1 Ответ

0 голосов
/ 09 марта 2010

Вот удар в темноте:

Если вы можете определить, по какому адресу был запущен стек процессов, то вы можете найти параметры, которые были предоставлены __start. Затем вы можете получить доступ к параметрам через указатели соответствующего типа, установленные на соответствующие смещения из начального указателя стека.

Согласно статье Как main () выполняется в Linux, Хьюк "Ястреб" Ким , первые несколько инструкций __start напишут начальные аргументы детерминистическим способом перед вызовом __libc_start_main.

Очевидно, что любой такой подход зависит от платформы и может быть нестабильным, если реализация __start была изменена.

...