连接类型LPVOID与char *

时间:2017-10-28 02:36:29

标签: c

我是C编程语言的初学者我得到了这段代码:

LPVOID lpvAddr;
lpvAddr = VirtualAlloc(NULL, strlen(jmp_esp), 0x3000, 0x40);
char *X = "\x41\x42\x43";
char *full2;
strcat(full2 , X);
strcat(full2 , lpvAddr);    //here I'm getting error because I can't concatenate char * with ipvAddr;

lpvAddr包含内存地址,例如:00112233。 如何使"full2"变量包含:"\x41\x42\x43\x00\x11\x22\x33"

1 个答案:

答案 0 :(得分:1)

VirtualAlloc具有非常具体的用法。请改用malloc。如果尝试访问另一个进程中的内存,请使用VirtualAllocEx

话虽如此,首先你需要在lpvAddr中放置一些东西。放置零,字节或字符串。例如:

char *jmp_esp = "abc";
LPVOID lpvAddr;
lpvAddr = VirtualAlloc(NULL, strlen(jmp_esp)+1, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
strcpy(lpvAddr, jmp_esp);

请注意,您必须在最后为 null-character 分配1个额外字节。

下一个问题是full2,它是未初始化的指针。首先,您必须初始化,然后使用strcpy写入空字符串,然后使用strcat将另一个字符串添加到 NUL terminated string

const char *X = "xyz";
char *full2 = malloc(strlen(x) + strlen(jmp_esp) + 1);
strcpy(full2 , X);
strcat(full2 , lpvAddr);

对于VirtualFree分配,这应该以{{1​​}}和free结束。

相关问题