Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi WINDOWS中文件的执行流程_Winapi_Windows Xp - Fatal编程技术网

Winapi WINDOWS中文件的执行流程

Winapi WINDOWS中文件的执行流程,winapi,windows-xp,Winapi,Windows Xp,我的问题是: WINDOWS中可执行文件的执行流程是什么?(即,启动应用程序时会发生什么情况。) 操作系统如何与应用程序集成以操作或处理应用程序 它是否有一个中央控制位置,用于检查每个文件或进程的执行情况 进程是否在执行目录中注册?(如有的话) 在WINDOWS环境中,实际会发生什么情况使文件执行其所需的任务 非常感谢您的帮助……这是一个高层次的问题,遗漏了许多细节: 操作系统读取PE头以查找exe依赖的DLL和exe的入口点 所有链接DLL中的DllMain函数通过DLL\u PROCESS\

我的问题是:

  • WINDOWS中可执行文件的执行流程是什么?(即,启动应用程序时会发生什么情况。)
  • 操作系统如何与应用程序集成以操作或处理应用程序
  • 它是否有一个中央控制位置,用于检查每个文件或进程的执行情况
  • 进程是否在执行目录中注册?(如有的话)
  • 在WINDOWS环境中,实际会发生什么情况使文件执行其所需的任务

  • 非常感谢您的帮助……

    这是一个高层次的问题,遗漏了许多细节:

  • 操作系统读取PE头以查找exe依赖的DLL和exe的入口点
  • 所有链接DLL中的
    DllMain
    函数通过
    DLL\u PROCESS\u ATTACH
    消息调用
  • 使用适当的参数调用exe的入口点

  • 除了内核本身,没有“执行目录”或其他中央控制。但是,有一些API允许您枚举和查询当前正在运行的进程,例如
    enumprocess

    您的问题不是很清楚,但我将尝试解释一下

    打开应用程序时,它将从磁盘加载到RAM中。 操作系统跳转到应用程序的入口点


    操作系统提供显示窗口、连接内容和接收用户输入所需的所有调用。它还管理处理时间,在应用程序之间平均分配时间。

    除了已经说明的阶段之外,还有很多工作要做(加载PE、枚举它所依赖的DLL、调用它们的入口点和调用exe入口点)

    可能最早的行动是操作系统和处理器合作创建一个新的地址空间基础设施(我认为基本上是专用的)。操作系统使用进程范围的数据(例如,进程ID和环境变量)初始化。它使用特定于线程的数据(线程id、SEH根处理程序等)初始化。一旦为每个dll选择了适当的地址并在其中加载,windows加载程序就会对导出的函数进行重新寻址。(非常简单-在编译时,dll无法知道每个使用者exe加载它的地址。因此,其函数的实际调用地址仅在加载时确定)。进程之间共享的内存页有一些初始化,例如windows消息,我认为磁盘分页结构也有一些初始化。还有很多事情要做。涉及的主要windows组件实际上是windows加载器,但涉及内核和执行程序。最后,调用exe入口点-默认情况下它是BaseProcessStart

    通常情况下,在操作系统级别以上,还要进行大量准备工作,这取决于所使用的框架(规范框架是CRT用于本机代码,CLR用于托管):框架必须初始化自己的内部结构,以便能够向应用程序提供服务—内存管理、异常处理、I/O,你可以说


    一个进行如此深入讨论的好地方是。你也可以在类似这样的论坛中更深入地挖掘,但你必须能够将其分解为更集中的部分。对于这样的POST,这是非常的。

    我们可以用C++或java或其他编程语言来读取进程ID和与进程相关的信息吗???是的,有Win32 API,可以从任何语言中获得。对于当前正在执行的进程-有GetProcessID:。对于所有当前运行的进程,都有枚举进程-用于系统wi