"GetThreadContext"사용 이외의 다른 프로세스 (Windows의 C++)에서 스레드의 EBP를 얻을 수있는 방법이 있는지 궁금합니다. 나는이 방법이 너무 많은 시간이 걸린다 고 생각한다. (나는 그것을 많이 사용한다.) 단지 EBTE를 얻을 수 있으면서도 CONTEXT의 모든 값을 얻을 수 없다면 더 빠를 것이다.
"ReadProcessMemory"를 사용하고 나머지 호출 스택과 함께 EBP를 얻으려는 생각이 들었지만 스택이 있어야하는 위치와 어디에서 가져와야하는지는 알지 못합니다.
누군가가 더 좋은 방법을 알고 있다면, 그것에 대해 듣게되어 기쁩니다.
감사합니다 :)다른 프로세스에서 스레드의 EBP 가져 오기
답변
다른 스레드의 EBP의 실행 값은 물론 스레드가 실행중인 경우 EBP 레지스터에 있습니다. 실행 중이 아니면 커널의 스케줄러에 의해 저장됩니다. GetThreadContext는 커널의 내용을 검색합니다. 그 외에는 더 빠를 것입니다.
성능 상황이 내가 이것을 썼을 때 이해했던 것보다 나쁘다. 스레드가 실행 중이면 커널은 APC 메커니즘을 사용하여 최신 값을 얻습니다. 이는 속도가 빠르지 만 다른 대체 API는 없습니다.
아니요, 잘못되었습니다. NtGetContextThread는 APC를 현재 스레드가 아닌 경우 항상 대상 스레드에 대기시킵니다. 그런 다음 APC가 완료 될 때까지 대기합니다. 그리 빠르지는 않습니다. – wj32
사실, 다른 빠른 대안이 있다면 나는 이것에 대해 더 열악해질 것입니다. 하나 있습니까? – bmargulies
아니요. 스레드가 실행중인 경우 해당 레지스터는 레지스터에 있습니다. 이는별로 도움이되지 않습니다. 실행 중이 아니면 레지스터는 KTHREAD 객체에 저장됩니다. 그래서 우리가 실제로 읽을 수 있도록 쓰레드 레지스터가 저장되어 있는지 확인하는 가장 좋은 방법은 APC를 큐에 넣고 그 쓰레드의 프로세서에 인터럽트를 발생시키는 것입니다. – wj32
EBP가 레지스터이기 때문에 GetThreadContext가 유일한 방법입니다. 프로세서는 컨텍스트 스위치를 수행 할 때이를 저장합니다. 스레드의 레지스터를 읽는 유일한 방법은 GetThreadContext를 사용하는 것입니다.
물론 EBP에 원하는 값이 있다는 보장이 없습니다 ... 프레임 포인터 생략으로 컴파일 된 함수는 현재 호출 프레임의 프레임 포인터에 EBP를 설정할 수 없습니다.
스택 추적 (EBP를 시작하려는 가장 보편적 인 이유)을 찾고 있다면 StackWalk64을 제안 할 수 있습니까?
- 1. 다른 Windows 프로세스에서 스레드의 현재 로캘을 가져옵니다.
- 2. Windows의 서브 프로세스에서 stdout 가져 오기
- 3. 실행중인 프로세스에서 개체 정보 가져 오기
- 4. 스레드의 실행 시간 가져 오기 java
- 5. 셸 프로세스에서 VBA 프로그램으로 정보 가져 오기
- 6. 원격 실행 프로세스에서 상태 가져 오기
- 7. 막힌 파이썬 프로세스에서 stacktrace 가져 오기
- 8. GetThreadContext는 EBP = 0을 반환합니다.
- 9. ptrace를 사용하여 여러 스레드의 CPU 레지스터 가져 오기 및 설정
- 10. 다른 스레드의 glutPostRedisplay
- 11. 다른 스레드의 BitmapFrame
- 12. 다른 스레드의 DoDragDrop()
- 13. 다른 스레드의 새로운 형식
- 14. 다른 스레드의 예외에서 StackTrace?
- 15. 다른 스레드의 소켓이있는 GUI
- 16. 다른 XSLT를 동적으로 가져 오기
- 17. 다른 하나의 파일 가져 오기
- 18. 다른 파일에서 변수 가져 오기
- 19. 다른 서버에서 css 가져 오기
- 20. 다른 앱에서 정보 가져 오기
- 21. 다른 클래스에서 값 가져 오기
- 22. 다른 앱에서 정보 가져 오기
- 23. 다른 레이아웃의 위젯 가져 오기
- 24. 다른 경로에서 쿠키 가져 오기
- 25. 다른 테이블의 필드 가져 오기
- 26. 파이썬 가져 오기 다른 폴더
- 27. 다른 날의 데이터 가져 오기
- 28. WOW64 : 32 비트 프로세스에서 x64 % CommonProgramFiles % 가져 오기
- 29. 웹 페이지 가져 오기, 다른 결과 가져 오기?
- 30. 다른 폴더의 다른 모델에서 장고 가져 오기
프로필 작성자는 무엇입니까? 어쩌면 당신이 당신의 문제를 설명한다면, 누군가 당신에게 더 빠른 길을 줄 수 있습니다. –
예, 프로필러 :) – Idov