码迷,mamicode.com
首页 > 其他好文 > 详细

全局变量初始化为函数返回值(先于main函数)

时间:2015-05-26 15:46:27      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:

  以前在提供给客户的接口库中如果是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文件,是否这样更容易截取程序执行流程?
 
欢迎交流。
 
 

全局变量初始化为函数返回值(先于main函数)

标签:

原文地址:http://www.cnblogs.com/ggxxjj123/p/4530467.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!