[英]weird pointer notation in 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("%d\n", fxptr()); // execute rand() through the function pointer
printf("%d\n", (*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
为指向返回 void (void(*)())
函数的指针的 c 样式转换,并带有取消引用和函数调用。 把它简化成这样就好了
typedef fn_ptr void(*)();
(*(fn_ptr)MEMORY_BUFFER)();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.