我是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"
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
和free
为malloc
分配结束。