2013-03-03 7 views
0

새로운 함수 호출을 생성 할 때마다 모든 정보를 계속 입력 할 필요가 없으므로 VisualC++에서 ReadProcessMemory 및 WriteProcessMemory 함수를 직접 작성하려고합니다. 이 프로젝트는 Windows Form입니다. 여기에 문제함수를 통해 값 전달하기

void Read(DWORD Add, int Value); 

private: System::Void btnP1Money_Click_1(System::Object^ sender, System::EventArgs^e) 
{ 
int BigMoney = 100000; 
int GetMoneyValue; 
DWORD MonAddr = 0x180A6C8; 

Read(MonAddr, GetMoneyValue); 
} 


void Read(DWORD Add, int Value) 
{ 
HWND window = FindWindow(0, _T("Process Window Name")); 
DWORD pID = NULL; 
DWORD base = dwGetModuleBaseAddress(pID, _T("Game.exe")); 
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); 
GetWindowThreadProcessId(window, &pID); 

ReadProcessMemory(handle, (LPCVOID)(base+Add), &Value, 4, NULL); 
} 

게임의 값이 500, 아직 읽기()에서 반환 된 값은 내가 잘못 무엇인지 0이 아님을합니다. 나는 각 버튼 클릭과 체크 박스 틱에서 매번 Read() 함수의 모든 것을 정의해야하는 것을 원하지 않는다. 당신이 값을 반환 할 수 있습니다, 또는

void Read(DWORD Add, int& Value); 

:

감사

당신은 참조로 전달해야

답변

1

당신 Read 헤더를

로 수정해야합니다.

나는 작은 예제를 작성했습니다. 변수의 내용을 확인하십시오. 주소가 아닌

void Read(int& Value) 
{ 
    Value++; 
} 

int main(array<System::String ^> ^args) 
{ 
    int GetMoneyValue = 5; 
    Read(GetMoneyValue); 

    Console::WriteLine(GetMoneyValue); 
    //6; 
    return 0; 
} 
+0

답장을 보내 주셔서 감사합니다. 그것이 내가 머리말에 한 것과 정확히 같습니다. 함수 선언을 void로 변경 Read (DWORD Add, int & Value); 함수 정의의 헤더를 void Read (DWORD Add, int & Value) {// 동일한 코드}로 바꾸면 이상한 결과가 나타납니다. 어떤 아이디어? 감사합니다 – Syperus

+0

@Syperus 당신은 ReadProcessMemory 기능 코드를 게시 할 수 있습니까? WINBASE.H'BOOL WINAPI ReadProcessMemory 가입일 – VladL

+0

( 는 LPCVOID lpBaseAddress, __out_bcount_part (n 크기 * lpNumberOfBytesRead) LPVOID lpBuffer, n 크기를 size_t __in , __out_opt의 *를 size_t lpNumberOfBytesRead __in hProcess, 처리 __in); ' – Syperus

1

, 그렇지 않으면 함수는 int의 복사본을 얻을 수

int Read(DWORD Add, int Value) 
{ 
    .... 
    return Value; 
} 
+0

답장을 보내 주셔서 감사합니다. 네, 이전에 그 값을 되 찾으려했으나, 0을 계속했습니다. 나는 참조로하려고하는데, 이상한 결과를 만들어 내고 있습니다. void (Read, DWORD Add, int & Value); 및 void 읽기 (DWORD 추가, int 및 값) {...}하지만 첫 번째 단추를 클릭하면 1752315632 및 두 번째 단추를 클릭하면 44293792 클릭하면 출력을 생성합니다. 그들은 잘못 전달할 수도 있습니다 그래서 그들은 무작위 아니에요. . 참조로 값을 전달하는 방법을 읽었지만 처음 시도하는 것입니다. – Syperus