1

Ok this is odd. It's the first time I've seen such a line of code. Basically this calls the entry point into an application once you've specified an offset (address) from a program's PE header.

As you can tell - I've been playing lately with writing my own PE loader. I'm still a beginner and attempting to understand the structure - but what exactly is that function call mean?

((void(*)(void))EntryPoint)();

//where 0x4484502 is gotten from:

PIMAGE_NT_HEADERS nt_header;
DWORD EntryPoint = nt_header->OptionalHeader.ImageBase + nt_header->OptionalHeader.AddressOfEntryPoint;

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

2 回答 2

2

线

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

将整数 0x4484502 转换为指向具有 void 参数并返回 void 的函数(从该地址开始)的点。一旦转换,函数指针就会被调用。

编辑:只需重新阅读问题......将 0x4484502 替换为EntryPoint完全相同的事情......该变量EntryPoint被转换为指向具有 void 参数并返回 void 的函数的指针。然后指针用于调用函数。

于 2013-05-11T14:09:19.333 回答
0

符号

(some_type)something

它是 C 风格的演员表。它等于一系列 C++ 强制转换,但没有dynamic_cast它是危险的 - 它允许您将指向私有基的指针强制转换为指向派生类的指针,而不仅仅是在派生类函数中。

我们在这里

(void(*)(void))0x4484502

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

符号func_ptr()

表示调用 指向的函数func_ptr


你可以随时在cdecl上查看这些奇怪的声明

于 2013-07-07T12:31:47.377 回答