Void指针Void类型强制转换函数调用



好吧,这很奇怪。这是我第一次看到这样的代码行。基本上,一旦您从程序的PE头指定了偏移量(地址),它就会调用进入应用程序的入口点。

你可以看出-我最近一直在写我自己的PE加载程序。我仍然是一个初学者,试图理解这个结构——但是这个函数调用到底是什么意思?

(空白(*)(空白))入口点)();

//where 0x4484502 is gotten from:
PIMAGE_NT_HEADERS nt_header;
DWORD EntryPoint = nt_header->OptionalHeader.ImageBase + nt_header->OptionalHeader.AddressOfEntryPoint;
((void(*)(void))0x4484502)();

((void(*)(void))0x4484502)();

将整数0x4484502强制转换为指向函数(从该地址开始)的点,该函数具有void形参并返回void。转换后,调用函数指针。

编辑:再读一遍问题....用EntryPoint替换0x4484502做完全相同的事情…变量EntryPoint被强制转换为指向具有void参数并返回void的函数的指针。

符号

(some_type)something

是c风格的强制转换。它等于一个c++类型转换序列,但是没有dynamic_cast,所以它是危险的——它允许你将私有基指针转换为派生类的指针,而不仅仅是在派生类函数中。

这里是

(void(*)(void))0x4484502

意味着0x4484502被强制转换为指向函数的指针,该函数接受void并返回void。

符号func_ptr()

表示调用func_ptr所指向的函数。


你总是可以在cdecl

检查这些奇怪的声明