현재 프로세스에 포인터가 매핑되어 있는지 확인하기위한 더러운 해킹은 access
시스템 호출에 대한 포인터를 전달하는 것입니다. 에 대해 errno
을 확인하십시오. 다른 하나는 munlock
을 사용하고 ENOMEM
을 확인하는 것입니다. 다른 하나는 /proc/PID/maps
을 구문 분석하는 것입니다. procfs에 의존하지 않고 부작용이 적은 메소드가 있습니까?포인터가 현재 프로세스에 매핑되는지 확인
1
A
답변
1
포인터에 대한 액세스를 확인하는 방법은 단순히 포인터를 사용하려고 시도하는 것입니다. 액세스 권한이없는 경우 SIGSEGV를 수신하게됩니다. SIGSEGV는 자신의 신호 처리기로 catch 할 수 있습니다.
이렇게하려면 포인터에 액세스하기 전에 setjmp()
함수를 사용하고 신호 처리기를 longjmp()
으로 설정해야합니다. 이것은에,에서 특정 지점 에서 setjmp()
기능을 다시 시작하려면 응용 프로그램을하게됩니다
...
longjmp(jmp_buf, 1);
:이 라인을 따라 뭔가 :하는 신호 처리기에서
if (setjmp(jmp_buf)) printf("The pointer was inaccessible.\n");
else {
int x = *ptr;
printf("The pointer was readable.\n");
}
, 당신은 할 것 방식으로 모든 레지스터를 복원하고 함수가 1
(기본값 : 0
대신)을 반환하도록합니다.
관련 문제
- 1. 모든 enum 값이 매핑되는지 확인 하시겠습니까?
- 2. NHibernate : 프로퍼티가 필드에 매핑되는지 알아보기
- 3. 프로세스에 의해 수정 된 파일 확인
- 4. Monotouch 현재 플랫폼 확인
- 5. 현재 도메인 확인
- 6. JavaScript 현재 URL 확인
- 7. 현재 활동 확인 Android
- 8. 현재 응답자를 확인 하시겠습니까?
- 9. 확인 현재 URL
- 10. vb.net 네트워크 드라이브가 지속적으로 매핑되는지 확인하는 방법
- 11. 현재 도메인 컨트롤러 이름 확인
- 12. Railstutorial.org 현재 테스트 유효성 확인
- 13. CCMenuItemImage의 현재 이미지를 확인 하시겠습니까?
- 14. 현재 역할에 대한 회원 확인
- 15. avaudioplayer의 현재 재생 시점 확인
- 16. 날짜 시간이 현재 날짜인지 확인
- 17. Joomla 2.5 현재 페이지 확인
- 18. 현재 시스템 시간을 확인 하시겠습니까?
- 19. 목록에서 현재 가리키는 항목 확인
- 20. 현재 파일이 주 파일인지 확인
- 21. 프로세스 설명자 포인터가 Linux의 현재 매크로와 일치하지 않습니다. 커널
- 22. 현재 프로세스에 대한 작업 개체 (있는 경우)를 얻으려면 어떻게해야합니까?
- 23. 현재 프로세스에 대한 Windows 성능 카운터를 얻는 방법
- 24. Visual Studio Addon : 프로세스에 현재 VS 인스턴스 첨부
- 25. Windows : 현재 프로세스에 보안 제한 사항을 추가 하시겠습니까?
- 26. 현재 프로세스에 대한 실행 파일의 절대 경로 얻기
- 27. 현재 프로세스에 대한 성능 카운터 CPU 사용량이 100보다 많습니다
- 28. 백그라운드 프로세스에 명령 보내기?
- 29. 글로벌 포인터가
- 30. 포인터가 필요합니까?
왜 내가 필요한지 물어봐도 될까요? 너 뭐하려고? – Wug
예, 그가 무엇을하는지 듣는 것은 재미있을 것입니다. –
Fortran과 같은 인수의 유형이나 수를 확인하지 않는 언어의 발신자가있는 도서관에서 가장 일반적인 문제 중 하나는 사용자 우리에게 나쁜 포인터를줍니다. 이것은 대개 사용자가 코드에서 버그를 찾고 수정하는 방법을 설명하는 요청을 지원합니다. 디버그 모드가 더 정확한 검사를 수행하여 사용자 코드에서 더 많은 버그가 더 빨리 발견 될 수 있기를 바랍니다. (valgrind를 사용하는 데 필요한 문서 및 오류 메시지는 충분하지 않습니다. – Jed