我是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"
答案 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
结束。