连接类型LPVOID与char *

问题描述 投票:-3回答:1

我是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"

c
1个回答
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);

这应该以VirtualFreefreemalloc分配结束。

© www.soinside.com 2019 - 2024. All rights reserved.