LRN*_*LRN 1 dll winapi constructor
问:如果我DllMain()在共享库中编写函数,还有一个函数__attribute__((constructor)),在加载库时首先执行哪一个函数?
问:如果我__attribute__((constructor))在链接到该共享库的可执行文件中有函数,那么首先会调用什么 - 库DllMain()或可执行文件的__attribute__((constructor))函数?
答:按此顺序调用函数:
DLL constructorDLL DllMain() (process attach)EXE constructorEXE main()EXE main() endsEXE destructorDLL DllMain() (process detach)DLL destructor如果在运行时(LoadLibrary()/ FreeLibrary())完成链接,则按以下顺序调用函数:
EXE constructorEXE main()EXE LoadLibrary()DLL constructorDLL DllMain() (process attach)EXE main() continuesEXE FreeLibaray()DLL DllMain() (process detach)DLL destructorEXE main() endsEXE destructor如果您忘记释放图书馆,那么订单是这样的:
EXE constructorEXE main()EXE LoadLibrary()DLL constructorDLL DllMain() (process attach)EXE main() continuesEXE main() endsEXE destructorEXE FreeLibaray() (system cleans up for you)DLL DllMain() (process detach)DLL destructor