2010-11-19 2 views
0

나는 프로세스 메모리를 읽기 위해 ReadProcessMemory를 사용하고 있습니다. 3325 값이 들어있는 지점을 찾고 있는데요. 그러나 16 진수 뷰어에서 메모리를보고 FD0C = 0CFD = 3325로 값이 표시됩니다. 따라서 값을 char 배열로 읽은 다음 변환하려고 시도하면 (atoi) 나는 쓰레기를 얻고있다. 저는 C++을 처음 접했고 전환을 수행 할 함수가 있는지 궁금해합니다. 또는 직접 작성해야 할 것인가 (나는 상관하지 않습니다)?ReadProcessMemory char 배열, 16 진수를 int로 출력

char num_char[16]; 
    _stackstart = _start + 0x28; 
    ReadProcessMemory(hProcess,(void *)_stackstart, &num_char, 4, &lpRead); 
    x = ...some conversion(num_char); 
    if(stack != x) 
    {tell me;} 

답변

0

atoi은 10 진수로만 작동합니다. 당신이 ASCII 문자의 문자열로 다루고있는 것처럼 보이지만, 오히려하지 않습니다, 당신이 게시 코드에서

x = strtol(num_char, NULL, 16); 
+0

리틀 엔디안, 오른쪽에서 왼쪽으로 배열을 읽는 방법이 있습니까? – flavour404

0

하고 설명 : 16 진수로 변환 (16)의 기본 값을 대신 strtol를 사용하여 통과 2 진수를 버퍼링하는 버퍼. 원시 이진 값을 정수로 변환하려면 올바른 값으로 변환하기 만하면됩니다. 올바른 크기의 정수 유형으로 변환하려면주의해야합니다. 당신만을 목록이 귀하의 예제 번호 바이트,하지만 당신은 int 또는 long은 4 바이트 정수입니다 비주얼 스튜디오 2008, 4.

읽고, 당신은 단순히이 작업을 수행 할 수 있습니다

int x = *reinterpret_cast<int*>(num_char); 

주 좀 더 이식성을 가지려면 4 바이트가 보장되는 유형을 사용해야합니다. Visual C++에서는 DWORD를 사용할 수 있습니다. 원하는 솔루션은 stdint.h의 int32_t를 사용하는 것이지만 Visual Studio 2010 이전 버전에서는 Visual Studio에서 사용할 수 없습니다.

또한 서명이없는 경우 유형이 서명되지 않은 경우 부호없는 유형을 사용하십시오.

관련 문제