当前位置: 首页 > news >正文

EXE文件执行过程中发生了什么?

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

大致来说,发生了这么几步:

1、Shell(Explorer.exe )调用CreateProcess函数激活exe程序
2、系统创建一个进程内核对象,引用计数置为1
3、系统为进程创建一个4GB的进程虚拟地址空间
4、PE装载器把exe的代码映射到地址空间,并查找ImportTable引入相关
的动态链接库(DLLs )
5、系统为进程创建一个主线程,线程得到CPU后,把CS:IP指向.text节中
的程序进入点(OEP) ,此处是一条JMP指令,它跳到XXXCRTStartup
函数处执行
6、这里完成c/c++运行期库的一些初始化设置,包括c++ 构造函数的调用
全局变量,静态变量的初始化
7、调用WinMain/main函数,进入主函数
8、注册窗口类,创建窗口,显示窗口,更新窗口,进入消息循环
9、窗口关闭,循环退出,返回到C/C++ 运行期库
10、完成一些清理工作
11 、最后是ExitProcess退出进程

详细过程参考:windows可执行程序的执行过程

转载于:https://my.oschina.net/u/3636678/blog/2048728

相关文章:

  • MathExam小学一二年级计算题生成器V1.0
  • 建设银行无人银行开业,铁饭碗是属于程序员的
  • Java 集合系列-第八篇-Map架构
  • Redhat7.0下部署NFS服务器
  • 网络,NFS
  • 服务器目录权限
  • LAMP搭建
  • 自动生成指定特征的数独题目(未完待续)
  • 学习python必备的学习网站
  • Linux服务器性能评估
  • Synchronized与Lock的底层实现解析
  • ES6数组的扩展----Array.from()和Array.of()
  • jdk动态代理和cglib动态代理的区别
  • 设计模式-结构型模式,python组合模式
  • webpack4学习笔记
  • 【Linux系统编程】快速查找errno错误码信息
  • 30秒的PHP代码片段(1)数组 - Array
  • Asm.js的简单介绍
  • CentOS 7 修改主机名
  • ES6系列(二)变量的解构赋值
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • go语言学习初探(一)
  • Java超时控制的实现
  • TypeScript迭代器
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 使用 @font-face
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 微服务入门【系列视频课程】
  • 一些关于Rust在2019年的思考
  • 阿里云服务器如何修改远程端口?
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • 交换综合实验一
  • ​马来语翻译中文去哪比较好?
  • #大学#套接字
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (阿里云万网)-域名注册购买实名流程
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)一些感悟
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *上位机的定义
  • .gitignore文件设置了忽略但不生效
  • .net 无限分类
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • @TableLogic注解说明,以及对增删改查的影响
  • @Transient注解
  • [ C++ ] STL priority_queue(优先级队列)使用及其底层模拟实现,容器适配器,deque(双端队列)原理了解
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [codeforces]Recover the String
  • [delphi]保证程序只运行一个实例
  • [HITCON 2017]SSRFme perl语言的 GET open file 造成rce
  • [iOS]iOS获取设备信息经常用法
  • [Java] IDEA Scala环境搭建
  • [Linux]进程间通信(system V共享内存 | system V信号量)