메모리 페이지 또는 페이지 범위가 프로세스의 주소 공간에있는 특정 DLL에 속한다는 믿을만한 방법이 있습니까?프로세스의 주소 공간에서 DLL에 의해 사용되는 페이지
답변
API 후킹으로 알려진 방법이 있습니다. John Robbins의 유명한 BugslayerUtil.DLL (그의 저서 "디버깅 응용 프로그램"참조)은 원래 자체 프로세스 내에서 API 후킹으로 사용되었습니다. 나는 모든 메모리 할당이 LocalAlloc
, GlobalAlloc
, VirtualAlloc
등과 같이 잘 알려진 소수의 함수에 할당 될 수 있음을 의미합니다. 프로세스 주소 공간 내부에서이 함수의 시작 주소를 덮어 쓸 수 있습니다. 이 작업은 프로세스 시작시 어딘가에서 수행하거나 DLL 주입을 사용하여 수행 할 수 있습니다 (프로파일 링 모드에서 Dependency Walker처럼). 따라서 모든 메모리 할당 시도를 기록 (추적)하고, 원래 함수로 호출을 전달하고, 반환 값 log (trace)를 한 번 더보고 결과를 되돌릴 수 있습니다. 모든 호출 시도 안에는 호출 스택에서이 함수를 호출 한 모든 함수를 볼 수 있습니다. 할당 된 메모리와 크기의 주소와 함께 호출 스택의 포함 내용은 찾고있는 전체 정보를 제공합니다. 모든 것을 다이나믹하게 볼 수 있습니다.
모든 물건을 직접 구현해서는 안됩니다. 인터넷에서 "API hooking"또는 "DLL injection"을 검색하면 충분한 예제를 찾을 수 있습니다. 호출 스택을 검사하려면 imagehlp.dll/dbghelp.dll (예 : http://www.codeproject.com/KB/threads/StackWalker.aspx 참조)의 문서화 된 StackWalk64 함수 (http://msdn.microsoft.com/en-us/library/ms680650(VS.85).aspx 참조)를 사용할 수 있습니다.
그래서 내 문제는 해결 될 것으로 보인다.
페이지 유형에 따라 다릅니다. dll의 코드 페이지 등의 주소는로드 될 때 알려지며 모든 디버거에서 "로드 된 모듈"창 또는 이와 동등한 것을 보면서 볼 수 있습니다.
일반적인 읽기/쓰기 메모리 페이지에 대해 이야기하고 있다면 나는 그것이 당신이 생각하는 것처럼, 나는 그것이 "속한"dll이 무엇인지 알아낼 방법을 모른다. 여기서 소유권의 엄격한 개념.
고마워요! 예, 저는 일반적인 읽기/쓰기를 말하고 있습니다. 물론 DLL의 기본 주소를 아는 데는 아무런 문제가 없습니다. 지금까지 성공하지 못했던 라이브러리 메모리로부터 프로세스를 기억하는 방법을 찾고 싶습니다. – Micktu
- 1. 다른 프로세스의 메모리 공간에서 값을 변경하는 방법
- 2. 큰 주소 인식 DLL에 연결
- 3. 프로세스의 메모리 시작 주소 지정
- 4. 페이지에 전체 프로세스의 가상 주소 공간 분할
- 5. dll에서 함수를 호출하는 다른 프로세스 주소 공간에서, 방법은
- 6. 페이지 내부 주소 별도 주소
- 7. 다중 스레드 Linux 프로세스의 주소 공간 레이아웃
- 8. 삽입 된 프로세스의 메모리 공간에서 데이터 구조를 재구성하는 방법은 무엇입니까?
- 9. .NET에서 페이지 주소 찾기
- 10. Nuget과 log4net을 여러 솔루션에 걸쳐 사용되는 하나의 DLL에 사용합니다.
- 11. dll에 문제가 있습니까?
- 12. 32 비트 프로세스의 페이지 테이블 크기는 얼마입니까?
- 13. 타사 프로세스의 알려진 메모리 주소 값 변경, Java
- 14. 동일한 서버에서 CURL에 의해 생성 된 PHP 프로세스의 PID에 액세스
- 15. 사용자 작업 공간에서 클래스로드
- 16. DLL에 구성 정보 넣기
- 17. Symfony2 영원한 페이지 요청에 사용되는 코드 구성
- 18. C++ dll에 대한 참조
- 19. 3D 공간에서 페이지 아래에 담그지 않고 요소를 회전하려면 어떻게해야합니까?
- 20. 가져 오기 주소 테이블의 상형 테이블?
- 21. 사용자 공간에서 커널 공간으로의 memcpy
- 22. Google 웹 로그 분석 - 웹 사이트 URL로 사용되는 IP 주소
- 23. SQL 명령을 작성할 때 주소 기호 @가 사용되는 이유는 무엇입니까?
- 24. 주소 표시 줄 위치를 기준으로 페이지 구성
- 25. DLL에 서명해야합니까?
- 26. 내가 통해 DLL에 접근하고있어 __stdcall
- 27. ORA : 009955 오류 (이름은 기존 개체에 의해 사용되는)
- 28. 지도에 의해 사용되는 메모리의 크기. 운반하는 모든 객체를 포함합니다.
- 29. cgcontext에 의해 생성 된 pdf에 페이지 추가하기
- 30. Linux에 특정 주소 할당
고마워요! 이미 DLL 주입을 구현했으며 API 후킹은 훌륭한 솔루션처럼 보입니다. 나를 괴롭히는 것은 성능 오버 헤드입니다. 600MB 이상의 메모리를 할당하기 위해 주입하는 애플리케이션이지만 어쨌든 시도해 볼 것입니다. 인사말 우크라이나에서 :) – Micktu
당신을 환영합니다! 나는 특히 I와 같은 배경을 가진 누군가를 도우며 기쁘게 생각합니다. 오버 헤드 때문에 그냥 시도해야합니다. 힙에 대한 메모리 할당은 매우 까다로운 작업이 아니므로 모든 함수 호출이 아닌 로그 파일에 a를 쓰면 몇 가지 조건 (더 잘 알아야 함)으로 호출을 필터링 한 다음 응용 프로그램의 전체 성능 별로 변하지 않을거야. 로그를 작성하기 위해 메모리 맵핑 된 파일을 사용하면 (문자열을 맵핑 된 파일 메모리로 복사하는 것만으로) 파일에 기록하는 작업이 매우 빨라집니다. 최고의 안부와 많은 성공 독일에서 당신을 기원합니다. – Oleg