能力值:
( LV2,RANK:10 )
|
-
-
2 楼
e 什么东东。。。。
|
能力值:
( LV12,RANK:210 )
|
-
-
3 楼
说起来是相当麻烦的!其实就是一个内存映射和页机制!你看一下核心编程中的内存管理部分就行了!
|
能力值:
( LV9,RANK:260 )
|
-
-
4 楼
可以试着学习操作系统等知识.一步一步来...不要一下就想那么大...先找到一个细节点去学习...:)
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
PE通过加载器加载到内存 cpu只能读一条一条的指令
|
能力值:
( LV12,RANK:210 )
|
-
-
6 楼
整理一下思路!
一个C++程序的执行过程
1:编辑
写C++代码
2:预处理
g++ -E参数可以看到这个过程
3:汇编
g++ -S可以看到这个过程,只所以要有这个过程因为编译器的开发复杂工作量大的问题,最早的C++代码也只是通过cfront程序来翻译成C代码实现编译的!
4:编译:
转换成机器码
5:链接
将相关的库 obj文件(VC)中链接成一个可装入模块!
到这里一个C++程序被制作成了一个可装入模块!我们运行的时候发生如下事情
6:系统分配PCB(EPROCESS)也就是建立一个空白内核对象
7:C/C++运行期库分配虚拟地址空间(虚拟的地址空间)
8:内存映射将EXE文件载入到地址空间
9:读取.rdata节,找到需要的DLL文件,DLL文件进入虚拟地址空间,这个过程采用的是装入时动态链接,WINDOWS还采用了一种机制——运行时动态链接,也就是说当程序执行发现需要DLL文件时候才会将真正的DLL文件载入到物理内存中如下面的函数
#include <windows.h>
#include <iostream>
using namespace std;
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
int main()
{
bool a;
if(cin>>a)
{
MessageBox(NULL,"hello world!","MB_OK",MB_OK);
}
return 0;
}
如果我们输入的BOOL值是0,则程序不会执行MessageBox函数,也就是说程序不需要USER32。DLL这时候它就会不将DLL文件载入!
当然这是一个理想的情况,一般来说DLL文件是通过文件映射的来实现共享的!
10:初始化操作
初始化内核对象:EPROCESS结构,这个过程主要填写一些结构成员,也包括页表的物理地址!
初始化CPU状态:将EIP指向第一条指令,将ESP指令栈顶
初始化控制信息:包括进程的状态等!
当然这些初始化操作都是用的虚拟地址!
11:建立主线程
进程的调度是不效率的,所以WINDOWS采用线程调度的方法!建立主线程,线程进入任务队列!
12:将页表压入到PTR寄存器中(CR3)
当真正的主线程建立后,这时候才会将页表压入到CR3寄存器中
13:缺页中断
当EIP指向第一条指令的时候,会发现是一个虚拟地址,于是产生缺页中断!
14:地址转换
缺页中断后系统会通过地址转换也就是查询CR3寄存器所指向的页表物理地址,查询出虚拟地址所对应的物理地址,知道了物理地址后,通过SWAP交换技术将需要的页载入到物理内存!
15:执行指令
这个过程中如果需要DLL文件中的函数,则可能会产生共享,在核心编程中有一个COPY-ON-WRITE的机制可以规结到这里
这个过程主线程得到CPU时间片,时间到后,会将当前的执行现chang保存到内核对象的CONTEXT结构中,用于下一次的执行!
16:从程序来说,这个过程是行执行,启动函数而后执行主函数
为什么要启动函数是因为主函数也有相关的参数,而这些参数必须通过类似的PUSH操作才可以入栈,这之前需要启动函数来获得!
17:其它的线程共同执行的问题
这些是线程同步的一些内容!
18:结束
return 0;
进程主线程内核对象的撤消等事情的完成!这个0用于设置EXITCODE等成员!
当然过程还可以更复杂,每一部分都需要用一大部的内容来写!总的来说一个PE文件的执行过程可以简单的理解为两部分
内存管理和CPU管理
对于CPU管理必然要解决进程控制、线程控制、线程调度、线程同步、线程通信这几方面的问题,每一部分都有所学的内容
对于内存管理,一般来说都可以划分为如下几个问题,第一内存分配,内存分配后必须解决内存保护的问题,不能出现乱访问的问题,内存扩展,也就是说虚拟内存的支持!
ps:和人感觉定位很关键,比如微机原理中的计算机系统层次结构,它给我们如下信息!
指令系统的学习:这个就是针对硬件来说的了
操作系统的学习:包括操作系统原理,算法,数据结构等等
系统软件的学习:包括编译原理 数据库等
应用程序的学习:包括主流的编程方法
把一个层次结构弄好,然后再想一个问题,操作系统——用户与硬件之间的媒介程序,既然起媒介作用,所以任务有二,其一方便用户操作,其二有效管理硬件,你所说的执行过程就在操作系统的有效管理硬件部分,更确切的说就是操作系统的CPU与内存管理,因为计算机是一种存储程序原理,与人的大脑有一拼,当然,还包括I/O设备的管理,这些其实源于一种人机模型的逻辑,内容太多了,也不知道写了写什么,总之别人怎么说过程也是别人理解的,关键是你自己能够系统,21世界信息处理能力将成为一种人才必备的技能!
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
LS 强悍~~~~~~~~~~~~~~~·
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
个人建议:最好看看PE文件的格式,因为除了PE Header以外,大部分Segement是映射到内存中去的,所以找到第一条命令的入口地址,下面就是反汇编的过程了。 推荐工具:dumppe.exe和dumpbin.exe
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
感谢大家的回答 ,PE格式我是知道的,要解析这个格式,应该是系统底层来解析吧,不是某个程序吧,不然这个程序也是PE结构,那要谁来解析啊。
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
Windows Loader
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
学习中,大家讲解很仔细~
|
|
|