2017-12-15 8 views
0

내가 아는 것은 ptr 포인트는 \xFF\xFF입니다. ptr의 값이 \xFF\xFF을 가리키는 (예 : 0x004E0000)라고 가정하면 foo 배열에 "\x41\x42\x43\x00\x00\x4E\x00"이 포함될 수 있습니까?문자열에 두 개의 포인터를 연결하여 배열 또는 문자로 저장하는 방법?

코드 :

#include <string.h> 
#include <iostream> 
#include <Windows.h> 
int main() 
{ 
    char foo[20]; 
    char *alpha = "\x41\x42\x43"; 
    char *test = "\xFF\xFF"; 
    void *ptr = VirtualAlloc(NULL, strlen(test), 0x3000, 0x40); 
    RtlMoveMemory(lpvAddr, test, strlen(test)); 
} 

내가 비주얼 스튜디오 2017

+0

왜 메모리를 복사하지 않고 * 이동하고 있습니까? –

답변

0

I 즉시에 문자열 후

  • foo의 시작 부분에 alpha 문자열을 복사 주소가 test가 가리키는 복사 : 당신은 그냥 원하는 가정

memcpy은 임의의 개체를 복사 할 때 귀하의 친구이지만 보조 포인터를 사용하는 것이 더 간단합니다.

char foo[20]; 
char *alpha = "\x41\x42\x43"; 
char *test = "\xFF\xFF"; 
char **pt = &test;  // pt now points to the address where "\xFF\xFF" lies 
memcpy(foo, alpha, strlen(alpha)); 
memcpy(foo + strlen(alpha), pt, sizeof(char *)); // copy the address 

그러나 을 조심 : 코드가 될 수 나는 당신의 질문에 대답했지만, 난 정말 그것을 위해 실제 사용 사례를 볼 수 없습니다. 그냥 학습 목적을 위해 주소 사본을 탐색한다고 가정합니다.

+0

이것이 내가 원했던 것입니다. 대단히 감사합니다. – 9090

0

foo는 아무것도를 복사하면 VirtualAlloc를 무엇을 할 필요가 않습니다를 사용하고 있습니다? 20 개의 문자 배열이 있습니다. 원하는 메모리 값을 복사하십시오. 당신은 lpvAddr을 결코 선언하지 않습니다, 당신은 ptr이라는 것을 의미 했습니까?

당신이 PTR로 평균 (lpvAddrto를 한 경우 (이이 방법의 8 바이트 주소의 높은 4 바이트)를 취할 완전히 무의미한 것처럼 보이지만 같은 것이다 :

memcpy(foo, test, 4); 
*((PULONG)foo+1) = *((PULONG)&ptr+1);