Linux 사용자 공간 프로세스에서 Vsyscall 페이지의 주소는 무엇입니까?
-
18-09-2019 - |
문제
본인의 용도로 vsyscall 페이지의 주소를 얻고 싶습니다. 여기에는 두 가지 아이디어 만 있습니다. 컴파일러를 변경 하여이 정보를 __start 또는 read/proc/[pid]/맵에 제공 한 후 알려진 위치 에이 정보를 저장하십시오. 느리기 때문에 읽고 싶지 않아요. 또한 컴파일러 수정을 원하지 않습니다. 누구든지 대안이 있습니까? 내가 알아야 할 상징이 있습니까?
그 시점에서 나는이 기능을이 작품의 일부로 개발 한 모듈에서 IOCTL 호출에 적용하고 싶은 유혹을 받고 있습니다!
해결책
여기 어둠 속에서 찌르는 것입니다.
프로세스 스택이 시작된 주소로 결정할 수 있다면 제공된 매개 변수를 찾을 수 있습니다. __start
. 그런 다음 초기 스택 포인터에서 해당 오프셋으로 설정된 적절한 유형의 포인터를 통해 매개 변수에 액세스 할 수 있습니다.
기사에 따르면 Hyouck "Hawk"Kim에 의해 Linux에서 Main ()가 실행되는 방법, 처음 몇 가지 지침 __start
전화하기 전에 초기 인수를 결정 론적으로 작성합니다. __libc_start_main
.
분명히 이와 같은 모든 접근 방식은 플랫폼 별이며 __start
변경되었습니다.
제휴하지 않습니다 StackOverflow