首页
社区
课程
招聘
[原创]编译器如何读取源文件
发表于: 2011-10-15 04:13 13957

[原创]编译器如何读取源文件

2011-10-15 04:13
13957

闲来无事,随便逆逆。
首先编译器编译的时候会使用CraeteFileW创建源文件,这个断点我们可以OD打开一个编译器,直接对所有文件操作的函数下断就能断下来了。先看第一个,创建源文件:

0044F680  /$  53            PUSH EBX
0044F681  |.  8B4424 08     MOV EAX,DWORD PTR SS:[ESP+8]
0044F685  |.  8B5C24 0C     MOV EBX,DWORD PTR SS:[ESP+C]
0044F689  |.  6A 00         PUSH 0                                             ; /hTemplateFile = NULL
0044F68B  |.  6A 00         PUSH 0                                             ; |Attributes = 0
0044F68D  |.  6A 03         PUSH 3                                             ; |Mode = OPEN_EXISTING
0044F68F  |.  6A 00         PUSH 0                                             ; |pSecurity = NULL
0044F691  |.  6A 01         PUSH 1                                             ; |ShareMode = FILE_SHARE_READ
0044F693  |.  68 00000080   PUSH 80000000                                      ; |Access = GENERIC_READ
0044F698  |.  50            PUSH EAX                                           ; |目标源文件
0044F699  |.  FF15 4CD05100 CALL DWORD PTR DS:[<&KERNEL32.CreateFileW>]        ; \CreateFileW
0044F69F  |.  8903          MOV DWORD PTR DS:[EBX],EAX                         ;  返回句柄
0044F6A1  |.  833B FF       CMP DWORD PTR DS:[EBX],-1                          ;  判断是否为空
0044F6A4  |.  75 08         JNZ SHORT 0044F6AE
0044F6A6  |.  FF15 18CF5100 CALL DWORD PTR DS:[<&KERNEL32.GetLastError>]       ; [GetLastError
0044F6AC  |.  EB 02         JMP SHORT 0044F6B0
0x0FEFF
00450168  |.  50            PUSH EAX                                           ; /Arg1
00450169  |.  E8 82F7FFFF   CALL 0044F8F0                                      ; \再次获得文件大小
0045016E  |.  85D2          TEST EDX,EDX
00450170  |.  72 10         JB SHORT 00450182
00450172  |.  77 07         JA SHORT 0045017B
00450174  |.  3D 00000080   CMP EAX,80000000                                   ;  原代码大小
00450179  |.  76 07         JBE SHORT 00450182                                 ;  小于等于这个数就跳
0045017B  |>  B8 05000020   MOV EAX,20000005                                   ;  不然设置EAX为这个数字,后返回
00450180  |.  EB 57         JMP SHORT 004501D9

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

收藏
免费 6
支持
分享
最新回复 (18)
雪    币: 190
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
既然是编译器,那为什么你搞的都是这些细枝末节?词法分析呢
2011-10-15 10:36
0
雪    币: 245
活跃值: (93)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
看了半天 不懂什么叫语法映射
2011-10-15 13:33
0
雪    币: 343
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
没有具体的编译过程
2011-10-15 14:57
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
5
核心程序在ml.EXE里面呢。
2011-10-15 21:54
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
6
我的理解就是:编译器从源文件读取代码,到内存中检查源码的各个结构,然后发现哪行不对,就显示错误
2011-10-15 22:10
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
这都什么东西啊。
2011-10-15 22:20
0
雪    币: 237
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
要研究编译器,有开源的gcc和clang不去读,逆这个有意义吗。
2011-10-16 08:59
0
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
9
为什么那么肯定我是研究编译器啊?说不定我不是想研究编译器呢?
2011-10-16 09:03
0
雪    币: 435
活跃值: (1287)
能力值: ( LV13,RANK:388 )
在线值:
发帖
回帖
粉丝
10
feff是unicode big endian fffe是unicode little endian判断头两字节是在分辨编码方式
2011-10-16 16:10
0
雪    币: 235
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
CreateFile之后就ReadFile读取前4字节,前4字节一般就是#inc,然后比较这4字节是否等于0xFFFEFEFF,这个字符我们弄到十六进制编辑器里面会发现是空白

汗。。。注释怎么办。晕。
2011-10-16 16:35
0
雪    币: 237
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
明白了,你这是source code embedded virus的可行性分析。
2011-10-17 10:31
0
雪    币: 111
活跃值: (211)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
标题起的太大了,不如改成简单谈谈vc是如何读取源文件的
2011-10-17 15:16
0
雪    币: 2362
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
FFFE是UTF8
2011-10-18 12:30
0
雪    币: 1708
活跃值: (586)
能力值: ( LV15,RANK:670 )
在线值:
发帖
回帖
粉丝
15
对记事本挂上符号表,再 f5 ,能学到的比这个还多。
2011-10-18 12:42
0
雪    币: 367
活跃值: (20)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
16
估计是想分析不同编码的文件编译器如何处理的.这个目标本身估计很多人研究过.
2011-11-23 12:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
哇。。。。。学习
2011-11-23 12:28
0
雪    币: 95
活跃值: (44)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
你研究的是什么版本?
2011-11-23 23:27
0
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
这个是不是说研究感染ml.exe程序....然后让他编译的文件全部都染上后门程序?就像以前那个unix的牛X人做的那样?
2011-11-23 23:39
0
游客
登录 | 注册 方可回帖
返回
//