能力值:
( LV2,RANK:10 )
|
-
-
51 楼
太好了,收藏。
|
能力值:
( LV2,RANK:10 )
|
-
-
52 楼
写的不错,学习了。
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
牛人,还没有听说过手写呢
|
能力值:
(RANK:600 )
|
-
-
54 楼
楼主的耐心值得钦佩,为写一个pe文件生成器提供极好的资料。
|
能力值:
( LV9,RANK:610 )
|
-
-
55 楼
至此,我们已经完成了PE结构的编写。是不是已经大功告成了呢?别着急,为了让我们写的程序可以运行,我们还要 完成.text(代码段), .rdata(只读数据段),data(全局变量数据段)三个段的实体部分。 首先编写.text段,他紧接着PE结构后面,但是我们如何编写这些内容呢?前面已经说过,.text段中存放所有的可执行 代码(机器码),我们可以通过先编写汇编指令(调用MessageBoxA和ExitProcess两个函数),然后反汇编出机器代码抄 到这里就可以了。这里有一点要注意,我们在为MessageBoxA函数传递参数时,如何将“Hello World!”字符串以及消息 框的标题“消息框”字符串传过去呢?这就要用到我们的.data(全局变量数据段)了,我们可以把这两个字符串放到这个段 中,然后把字符串的偏移首地址作为参数传给MessageBoxA即可。因为要以200h对齐,所以剩余部分用零补齐,最终得到 的代码如下: 00400 6A 00 68 00 30 40 00 68 07 30 40 00 6A 00 E8 07 j.h.0@.h0@.j.? 00410 00 00 00 6A 00 E8 06 00 00 00 FF 25 08 20 40 00 ...j.?...% @. 00420 FF 25 00 20 40 00 00 00 00 00 00 00 00 00 00 00 %. @........... 00430 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00440 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00450 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00460 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00470 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
這個地方的解釋有點太牽強了,最好把後面那倆jmp解釋一下 要不人家看的雲裡霧裡的 不知道爲什麽jmp的地址是這樣的,我翻譯了一下 lz上面提到的機器碼
0040101D E8 07000000 CALL PE.00401029 //call MessageBox
00401022 6A 00 PUSH 0
00401024 E8 06000000 CALL PE.0040102F //call ExitProcess
00401029 FF25 08204000 JMP DWORD PTR DS:[402008]
0040102F - FF25 00204000 JMP DWORD PTR DS:[402000]
402008 和 402000 實際上是FirstThunk的RVA地址啦, 它指向的內容才是內核的PE加載器在加載PE文件的時候獲得的真正的函數地址 最好解釋一下
ps。雖然RadAsm編譯出來是這樣結構的exe程序,其實完全可以設計的不一樣,各個部份位置都可以調整。
|
能力值:
( LV9,RANK:610 )
|
-
-
56 楼
PE文件头:是PE相关结构 IMAGE_NT_HEADERS 的简称,其中包含了许多PE装载器用到的重要域。执行体在支持PE文件 结构的操作系统中执行时,PE装载器将从DOS MZ header中找到PE header的起始偏移量,跳过了MS-DOS 实模式残余程序 , 直接定位到真正的文件头PE header, 长度20byte)。
楼主的这句话有点错误,通过e_lfanew定位到的是到了NT_HEADERS结构,还没有跳过PE标志的.得过了4个字节的PE文件标志才到IMAGE_FILE_HEADER结构的.不过在接下来楼主写的里却已经改正了这个错误.
楼主真是够耐心啊,一个一个的手写进来,觉得你可以用程序来实现填充这样更好呢.
實在看不出來LZ那裡錯了
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
很象高手!呵呵!
|
能力值:
( LV2,RANK:10 )
|
-
-
59 楼
老大好帖子哦!
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
深入简出 很好 很强大 佩服楼主对PE格式的认知程度
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
这实际上就是编译器最后生成PE文件的 工作。
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
mark一下
|
能力值:
( LV3,RANK:20 )
|
-
-
63 楼
真是深入理解pe格式啊
|
能力值:
( LV2,RANK:10 )
|
-
-
64 楼
** 啊 神人
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
相当的佩服,好好学习
|
能力值:
( LV2,RANK:10 )
|
-
-
66 楼
感谢楼主,让我这个菜鸟好好理解了PE结构
|
能力值:
( LV2,RANK:10 )
|
-
-
67 楼
好牛额…学习
|
能力值:
( LV3,RANK:20 )
|
-
-
68 楼
顶呀 太好了
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
真是不错的文章
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
写的很是专业,从另一层面能更加的学习PE了!
|
能力值:
( LV2,RANK:10 )
|
-
-
71 楼
好文章,收藏起来慢慢学习
|
能力值:
( LV2,RANK:10 )
|
-
-
72 楼
条理清晰 很好
|
能力值:
( LV2,RANK:10 )
|
-
-
73 楼
不错不错,才学程序3个月就已经这水平,佩服
|
能力值:
( LV2,RANK:10 )
|
-
-
74 楼
对了解PE结构有很大的帮助
下次手写个JPEG出来吧
|
能力值:
( LV2,RANK:10 )
|
-
-
75 楼
膜拜膜拜膜拜
|
|
|