首页
社区
课程
招聘
哪里可以找到windows加载PE文件的详细过程,到进程第一句代码开始运行时的详细资料?
发表于: 2007-12-25 14:41 12098

哪里可以找到windows加载PE文件的详细过程,到进程第一句代码开始运行时的详细资料?

2007-12-25 14:41
12098
看雪上关于PE文件格式的说明的文章很多的,我也读过其中一部分,包括那本<<软件加密技术内幕>>讲的PE格式,也去读过了。不知道是我没有理解透的还是其它的原因,我所读过的资料上讲的只有以下两种情况,一是PE文件作为文件存在的时候的PE格式说明,二是映射到内存以后PE文件在内存中的格式说明。

但这中间似乎少了一步,以至于很多关键的地方让人感到困惑。缺少的我感觉就是Windows把PE文件从文件形式加载到内存中的具体过程,应该有一份很详细并且步棸很明确的资料吧,比如第一步从外理PE文件头开始,一直到最后进程开始运行并执行第一句代码的过程。

这样的资料能找到吗?看见别人做的PE加载器,可以自已加载EXE文件的,应该就是根据这样的资料吧。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
2
Windows Interals 4th, WRK
2007-12-25 19:39
0
雪    币: 398
活跃值: (343)
能力值: (RANK:650 )
在线值:
发帖
回帖
粉丝
3
doskey在pediy转过毛德操的一些文章
里面有讲到CreateProcessW的详细过程
个人觉得写的比较好
推荐一下
2007-12-25 19:42
0
雪    币: 1946
活跃值: (248)
能力值: (RANK:330 )
在线值:
发帖
回帖
粉丝
4
看代码看wrk
看理论看深入解析windows操作系统
2007-12-25 19:49
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
5
深入解析Windows操作系统 是潘爱民刚翻译的 <Microsoft® Windows® Internals, Fourth Edition: Microsoft Windows Server™ 2003, Windows XP, and Windows 2000> 里面有讲Createprocess和过程
另外<intel 汇编语言程序设计>也涉及到了几句话
2007-12-25 19:51
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
不好意思,问一下WRK是什么。深入解析windows操作系统,这本书我去找找看。
2007-12-25 23:57
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
对了,还想问一个问题。就在这里问了吧,不用再开新帖占用看雪的版面了。是关于内存中指令的执行的,CPU究竟是按一个什么样的规律去决定每一条指令的起始地址的啊,花指令可以迷惑像OD这样反汇编软件,让它显示错误的结果,却怎么样也干扰不到CPU对指令正确执行吧。这是为什么了?

由此可以引发以下这个问题,在OD中如果在程序的某个地方断下来,这时候如果按F9,应该就是执行的ContinueDebugEvent,程序的结果肯定不会错。但如果用单步的方式在同样的地方开始执行程序,会不会因为碰到花指令而让程序执行出错误的结果了?
2007-12-26 00:49
0
雪    币: 709
活跃值: (2420)
能力值: ( LV12,RANK:1010 )
在线值:
发帖
回帖
粉丝
8
严重同意。都看最保险~
2007-12-26 06:57
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实很简单,CPU解释的永远是eip指向的那条指令,也就是说,cpu只读取位于eip地址上的指令,后面的怎么样它不管。
但是反汇编器解释时往往是要把你所看见的地方的数据都转换为代码的,所以,会把无用的数据看作指令的一部分,这就是cpu不出错,但od里看是不对的道理。

比如:.text:000118E2 后面的数据是永远执行不到的,
.text:000118DF                 fdiv    dword ptr [eax] ; Divide Real
.text:000118E1                 push    edi
这些可能也是永远执行不到的。

.text:000118D2                 lea     eax, loc_118D8  ; Load Effective Address
.text:000118D8
.text:000118D8 loc_118D8:                              ; DATA XREF: start:loc_118D2o
.text:000118D8                 add     eax, 0Eh        ; Add
.text:000118DB                 jmp     short loc_118E2 ; Jump
.text:000118DD ; ---------------------------------------------------------------------------
.text:000118DD                 jmp     short loc_118D2 ; Jump
.text:000118DF ; ---------------------------------------------------------------------------
.text:000118DF                 fdiv    dword ptr [eax] ; Divide Real
.text:000118E1                 push    edi
.text:000118E2
.text:000118E2 loc_118E2:                              ; CODE XREF: start+19j
.text:000118E2                 jmp     eax             ; JMP 000118E6
.text:000118E2 ; ---------------------------------------------------------------------------
.text:000118E4                 db 0E9h ; ?
.text:000118E5                 db  21h ; !
.text:000118E6 ; ---------------------------------------------------------------------------
.text:000118E6                 push    [ebp+DriverObject]
2007-12-27 10:59
0
游客
登录 | 注册 方可回帖
返回
//