以前在提供给客户的接口库中如果是dll,则dll中的互斥锁很容易在dllmain中初始化,
但是对于lib静态库则没有想到更好的处理办法。现在才发现原来可以在lib中也可以简单直
接的在main函数外初始化。大家有这方面更深一步的研究,希望能共享一下,多谢!
1、vs2010下,编译为可执行程序(注意运行顺序):
2、编译为静态库被调用(注意运行顺序):
3、编译为动态库被调用(注意运行顺序):
相关现象1:直接在项目-》属性-》链接器-》高级-》入口点中定义为main,程序编译过程中警告,
运行后,add函数并没有先于main函数执行
入口点改为add,仍然会有警告:
运行后a+b值为随机
由此可以看出 此时vs入口点“并不是”或者“并不能说”是 main 或者add。
使用OD更进一步的跟踪:在1情况下,在_tmaincrtstartup函数中会在进行堆变量初始化时直接调用add函数,在调用add函数后才会再进行main函数调用。
后续猜想:如果用来修改PE文件,是否这样更容易截取程序执行流程?
欢迎交流。
时间: 2024-10-12 13:02:17