好吧,其实我是手动映射模块插入过程,事实上,我的电话映射DllEntryPoint从标准结构IMAGE_NT_HEADERS从而IMAGE_NT_HEADERS::OptionalHeader::AddressOfEntryPoint等等...
问题:考虑以下代码:
void Log(const char*, ...);
class Test
{
private:
struct List_t
{
const uint32_t x;
const uint32_t y;
} List;
public:
Test(List_t z) : List(z) { Log("Called event 0! \n"); }
~Test() {}
};
void Entry()
{
Test Instance
(
{
0x200,
0x400
}
);
Log("Called! \n");
}
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
if(fdwReason == 1)
Entry();
return TRUE;
}
所以如果模块入口点被IMAGE_NT_HEADERS::OptionalHeader::AddressOfEntryPoint映射器调用,构造函数Test()永远不会被执行,而该Entry()函数被成功执行,现在如果模块加载了标准,LoadLibraryA();那么Test()构造函数被成功调用......
我在哪里可以找到有关此的一些信息?
我听说过一些关于CRT初始化程序的事情,但我找不到任何深入的东西......