繁体   English   中英

c中奇怪的指针符号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM