c中奇怪的指针表示法



有人能向我解释为什么作者将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)();

最新更新