有人能向我解释为什么作者将void指针初始化为这样的内存位置吗。我只是一个发明家,以前从未见过这样的符号。
void executeCode(){
char* MEMORY_BUFFER = (char*)VirtualAlloc(NULL, sizeof(someCode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
memcpy(MEMORY_BUFFER, someCode, sizeof(someCode));
(*(void(*)())MEMORY_BUFFER)();
}
char *MEMORY_BUFFER = /* whatever */;
MEMORY_BUFFER
是指向char的指针。不能"执行字符串">
如果你有一个指向函数的指针,你就可以执行它。
int (*fxptr)(void) = rand;
printf("%dn", fxptr()); // execute rand() through the function pointer
printf("%dn", (*fxptr)()); // dereferencing the function pointer is redundant
铸造
(void(*)())MEMORY_BUFFER
"转换"(如果有效(MEMORY_BUFFER
到一个指向函数的指针,该函数接受未指定数量的参数,但不返回任何内容
您可以通过(假设它是有效的(指针调用函数
((void(*)())MEMORY_BUFFER)();
(*(void(*)())MEMORY_BUFFER)(); // no need to dereference function pointer
它看起来像是MEMORY_BUFFER
到函数指针的c样式转换,返回带有取消引用和函数调用的void(void(*)())
。如果能像那样简化它,那就太好了
typedef fn_ptr void(*)();
(*(fn_ptr)MEMORY_BUFFER)();