2013-02-21 1 views
0

WriteProcessMemory()의 매개 변수 중 하나는 분명히 기본 주소에 대한 포인터를 묻습니다. 하지만 멀티 레벨 포인터라면 어떻게 될까요? 예를 들어 포인터를 세 번 찾아야 고정 주소를 얻고 첫 번째 오프셋은 0, 두 번째 오프셋은 57, 세 번째 오프셋은 268입니다. 이제 정확한 위치에 쓰고 싶다면 어떻게해야합니까? WriteProcessMemory() 함수에 오프셋을 포함하고 세 개의 오프셋을 모두 포함해야합니까, 아니면 고정 주소로 안내 한 마지막 오프셋 만 포함해야합니까? 일을 명확히하기 위해 기본적으로 PC에서 1 인칭 슈팅 게임을 통해 메모리를 조작하는 연습을하고 있습니다. 내 목표는 실제로 핵무기를 만드는 것이 아닙니다. 저는 단지 메모리를 하나의 프로세스에 쓰는 연습을하고 싶었습니다. (예를 들어, '건강'주소 나 '탄약'주소에 새로운 값을 쓰려고합니다.) 그리고 저는 주로 다단계 포인터에서 오프셋을 설명하는 방법을 알고 싶습니다.다단계 포인터 및 오프셋과 함께 C++에서 WriteProcessMemory() 사용?

+0

참고 : ['ReadProcessMemory' 및'WriteProcessMemory'는 IPC 메커니즘이 아닙니다.] (http://blogs.msdn.com/b/oldnewthing/archive/2006/01/17/513779.aspx). –

답변

0

주소는 주소입니다. 다단계 포인터 (포인터에 대한 포인터에 대한 포인터)를 사용하여 작업을 수행했는지는 중요하지 않습니다.

기본 주소는 쓸 주소입니다. 멀티 레벨 포인터를 가리키는 포인터가 그 매개 변수에 들어갑니다.

0

WriteProcessMemory는 절대 데이터를 메모리에 저장합니다. 멀티 레벨 구조를 메모리에 쓰고 싶다면 다음과 같이하십시오. 요소에 포인터가있는 경우 리모컨 lpBaseAddress을 기반으로 포인터 값을 쓰고 작성중인 데이터의 양을 기록해야하며 메모리에 저장되는 데이터를 작성해야합니다.

작성중인 구조에 포인터가있는 경우 작성중인 대상 데이터의 일부로 포인터를 다시 작성하지 않으면 포인터가 작동하지 않습니다.