青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

S.l.e!ep.¢%

像打了激速一樣,以四倍的速度運轉,開心的工作
簡單、開放、平等的公司文化;尊重個性、自由與個人價值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

PE 文件格式 (1)

Posted on 2009-09-12 04:55 S.l.e!ep.¢% 閱讀(2196) 評論(1)  編輯 收藏 引用 所屬分類: PE
?
PE 文件格式
?
PE. Portable Executable, 可移植的可執行文件, 是 MS WinNT, Win95, Win32中可執行的二進制文件
???a.在 Win 中,驅動也是這種格式
?? b.這種文件格式由MS設計
?
1. DOS 頭是這樣的一個結構(也叫 'MZ' 頭), 總共是 64 bytes
??? typedef struct _IMAGE_DOS_HEADER
?? {??????
??????? WORD?? e_magic;??????? // 必需為 4D 5A???? 'MZ'?? IMAGE_DOS_SIGNATURE
??????? WORD?? e_cblp;????????? // 文件最后頁的字節數???????????
??????? WORD?? e_cp;??????????? // 文件頁數
??????? WORD?? e_crlc;????????? // 重定義元素個數
??????? WORD?? e_cparhdr;???? // 頭部盡寸, 以段落為單位??????????????
??????? WORD?? e_minalloc;???? // 所需的最小附加段
??????? WORD?? e_maxalloc;??? // 所需的最大附加段
??????? WORD?? e_ss;??????????? // 初始的SS值 (相對偏移量)
??????? WORD?? e_sp;??????????? // 實始的SP值?
????????WORD?? e_csum;??????? // 校驗和
????????WORD?? e_ip;???????????? // 初始的IP值
????????WORD?? e_cs;??????????? // 初始的CS值(相對偏移量)
????????WORD?? e_lfarlc;???????? // 重分配表文件地址
????????WORD?? e_ovno;???????? // 覆蓋號
????????WORD?? e_res[4];?????? // 保留字?
??????? WORD?? e_oemid;?????? // OEM標識符 (相對 e_oeminfo)??????????????
??????? WORD?? e_oeminfo;???? // OEM 信息????????????????
??????? WORD?? e_res2[10];??? // 保留字
??????? LONG?? e_lfanew;?????? //? PE頭文件偏移量 , IMAGE_NT_HEADER32 結構所在的文件地址?????????
?? }IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
???
?? (1). “MZ”是MS-DOS開發者之一的馬克·茨柏克沃斯基(Mark Zbikowski)的姓名首字母縮寫。
?? (2).? e_lfanew定位到PE文件頭
?
???P:? 1. 如何修改 DOS Stub
??????? A:?? If you're compiling and linking the program yourself using MS compilers then the simplest approach would be to put in a custom DOS stub using the linkers /STUB[^] switch. Put in one which simply does nothing and returns immediately.?
???????
/STUB:filename
?Remarks

where:

filename

An MS-DOS application.

The /STUB option attaches an MS-DOS stub program to a Win32 program.

A stub program is invoked if the file is executed in MS-DOS. It usually displays an appropriate message; however, any valid MS-DOS application can be a stub program.

Specify a filename for the stub program after a colon (:) on the command line. The linker checks filename and issues an error message if the file is not an executable. The program must be an .exe file; a .com file is invalid for a stub program.

If this option is not used, the linker attaches a default stub program that issues the following message:

When building a virtual device driver, filename allows the user to specify a file name that contains an IMAGE_DOS_HEADER structure (defined in WINNT.H) to be used in the VXD, rather than the default header.

To set this linker option in the Visual Studio development environment

  1. Open the project's Property Pages dialog box. For details, see Setting Visual C++ Project Properties.

  2. Click the Linker folder.

  3. Click the Command Line property page.

  4. Type the option into the Additional Options box.

To set this linker option programmatically


?
??????? 2. DOS 下的程序 與 (Win32下的程序?/ VC6編譯的DOS程序), MZ頭的不同?
?
???---------------------------------------------------------------------------------

?? Offset?????? 00 01 02 03 04 05 06 07? 08 09 0A 0B 0C 0D 0E 0F

?? 00000000? 4D 5A 90 00 03 00 00 00?? 04 00 00 00 FF FF 00 00?? MZ?..........
?? 00000010? B8 00 00 00 00 00 00 00?? 40 00 00 00 00 00 00 00?? ?......@.......
?? 00000020? 00 00 00 00 00 00 00 00?? 00 00 00 00 00 00 00 00?? ................
?? 00000030? 00 00 00 00 00 00 00 00?? 00 00 00 00 F0 00 00 00?? ............?..

???---------------------------------------------------------------------------------??
??
?? 第一行:
?? (1). 4D 5A 對應 IMAGE_DOS_HEADER.e_magic 字段, 分別為 'MZ' 的 ASCII 碼
?? (2). 90 00 對應 IMAGE_DOS_HEADER.e_cblp 字段,值為 0x0090,
?? (3). 03 00 對應 IMAGE_DOS_HEADER.e_cp 字段,值為 0x0003,
?? (4). 00 00 對應 IMAGE_DOS_HEADER.e_crlc 字段,值為 0x0000
??
?? (5). 04 00 對應 IMAGE_DOS_HEADER.e_cparhdr?? 0x0004;???? // 頭部盡寸, 以段落為單位??????????????
???(6). 00 00 對應 IMAGE_DOS_HEADER.e_minalloc?? 0x0000;???? // 所需的最小附加段
???(7). FF FF 對應 IMAGE_DOS_HEADER.e_maxalloc? 0xFFFF;??? // 所需的最大附加段
???(8). 00 00 對應 IMAGE_DOS_HEADER.e_ss;???????? 0x0000???? // 初始的SS值 (相對偏移量)
???
?? 第二行:
???(9) . B8 00 對應 IMAGE_DOS_HEADER.e_sp;??? 0x00B8???????? // 實始的SP值?
???(10).00 00 對應 IMAGE_DOS_HEADER.e_csum; 0x0000?????? // 校驗和
???(11).00 00 對應 IMAGE_DOS_HEADER.e_ip;?? 0x00????????? // 初始的IP值
???(12).00 00?對應?IMAGE_DOS_HEADER.e_cs;? 0x00????????? // 初始的CS值(相對偏移量)
???
????(13). 40 00 對應 IMAGE_DOS_HEADER.e_lfarlc;? 0x0040??????? // 重分配表文件地址
????(14). 00 00 對應 IMAGE_DOS_HEADER.e_ovno;? 0x0000?????? // 覆蓋號
????(15). 00 00 對應 IMAGE_DOS_HEADER.e_res[4]; 0x0000????? // 保留字
??????????? 00 00
??????????? 00 00
?
??? 第三行:
????(16). 00 00
??? (17). 00 00 對應 IMAGE_DOS_HEADER.e_oemid;?????? // OEM標識符 (相對 e_oeminfo)??
??? (18). 00 00 對應 IMAGE_DOS_HEADER.WORD?? e_oeminfo;???? // OEM 信息
????(16).?00 00 對應 IMAGE_DOS_HEADER.WORD?? e_res2[10];??? // 保留字?
???????????
????(17).?00 00
????(18).?00 00?
????(19).?00 00
????(20).?00 00

?

??? 第四行:
????(21).?00 00
????(22).?00 00?
????(23).?00 00
????(24).?00 00

?

????(25).?00 00
????(26).?00 00?
????(27).?F0 00 對應 IMAGE_DOS_HEADER.LONG?? e_lfanew;? 這里的地址為 0x000000F0 //? PE頭文件偏移量 , IMAGE_NT_HEADER32 結構所在的文件地址
????(28).?00 00

2. DOS Stub (DOS實模式殘余程序)
?? (1). 實模式殘余程序 是一個在裝載時能夠被 MS-DOS運行的實際程序。
?? (2). Dos Stub 只是提供了 PE 文件在DOS下面執行時,DOS會把它當作有效的執行文件而順利執行。
???????? 通常 Win32 的程序會在屏幕上輸入"This Program cannot run in DOS mode"之類的提示語
?? (3). 可以隨便改變 DOS Stub, 根據自己的意圖實現完整的 DOS 代碼
???(4). DOS 下的EXE文件,長度不定
?? (5). 在 Win32下, MZ頭 跟 DOS 加載模塊 用不上, 加上這兩個只為兼容性問題

P:
1.? 只取 MZ 頭與 DOS Stub

Offset????? 0? 1? 2? 3? 4? 5? 6? 7?? 8? 9? A? B? C? D? E? F

00000000?? 4D 5A 90 00 03 00 00 00? 04 00 00 00 FF FF 00 00?? MZ?..........
00000010?? B8 00 00 00 00 00 00 00? 40 00 00 00 00 00 00 00?? ?......@.......
00000020?? 00 00 00 00 00 00 00 00? 00 00 00 00 00 00 00 00?? ................
00000030?? 00 00 00 00 00 00 00 00? 00 00 00 00?00 0F 00 00?? ............?..
00000040?? 0E 1F BA 0E 00 B4 09 CD? 21 B8 01 4C CD 21 54 68?? ..?.???L?Th
00000050?? 69 73 20 70 72 6F 67 72? 61 6D 20 63 61 6E 6E 6F?? is program canno
00000060?? 74 20 62 65 20 72 75 6E? 20 69 6E 20 44 4F 53 20?? t be run in DOS
00000070?? 6D 6F 64 65 2E 0D 0D 0A? 24 00 00 00 00 00 00 00?? mode....$.......
00000080?? 8D 44 CE 8E C9 25 A0 DD? C9 25 A0 DD C9 25 A0 DD?? 岲螏?犦?犦?犦
00000090?? AB 3A B3 DD CD 25 A0 DD? 4A 39 AE DD C8 25 A0 DD?? ?齒?犦J9?犦
000000A0?? A6 3A AA DD C2 25 A0 DD? A6 3A A4 DD CB 25 A0 DD?? ??犦?ぽ?犦
000000B0?? FF 03 A4 DD CA 25 A0 DD? C9 25 A1 DD BA 25 A0 DD?? .ぽ?犦?≥?犦
000000C0?? FF 03 AB DD CF 25 A0 DD? 0E 23 A6 DD C8 25 A0 DD?? .?犦.#?犦
000000D0?? 52 69 63 68 C9 25 A0 DD? 00 00 00 00 00 00 00 00?? Rich?犦........
000000E0?? 00 00 00 00 00 00 00 00? 00 00 00 00 00 00 00 00?? ................

結果,
運行程序并沒有顯示 '?This program cannot be run in DOS?mode?' ..........??
在純DOS下會顯示 'Errror in exe file'
難道跟 MZ 頭除了e_lfanew的字段有關?........

將開頭的? 4D 5A 90 00 03 00 改為
????????????????? 4D 5A 00 01 01 00
之后,在純DOS下就會顯示??'?This program cannot be run in DOS?mode?'
在 Win 下會一閃而過, 需要先 run cmd, 再run debug, -q 退出, 再執行,就會顯示 '?This program cannot be run in DOS?mode?'
原因暫時未知.

Feedback

# re: PE 文件格式 (1)  回復  更多評論   

2009-09-13 11:41 by 99書城
按時間愛的世界
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩午夜激情av| 欧美日韩在线观看一区二区| 欧美大尺度在线| 男人天堂欧美日韩| 欧美激情国产日韩精品一区18| 免费在线观看精品| 亚洲国产精选| 亚洲人成在线观看| 亚洲一区在线播放| 久久精品国产亚洲一区二区| 久久综合伊人77777蜜臀| 欧美精品综合| 国产欧美在线播放| 在线播放中文字幕一区| 日韩一级大片在线| 久久精品九九| 亚洲精品一级| 久久精品亚洲一区| 欧美体内she精视频在线观看| 国产一区二区三区在线播放免费观看| 亚洲高清自拍| 性欧美xxxx大乳国产app| 欧美jizz19性欧美| 亚洲在线视频| 欧美精品一区二区三| 国产亚洲欧美中文| 一区二区电影免费在线观看| 久久视频这里只有精品| 99精品国产在热久久婷婷| 久久米奇亚洲| 国产啪精品视频| 亚洲视频日本| 亚洲人成网站777色婷婷| 午夜精品在线视频| 欧美日韩免费观看一区三区 | 久久综合久久综合这里只有精品| 欧美激情成人在线| 久久av最新网址| 国产精品国色综合久久| 99伊人成综合| 欧美国产一区二区三区激情无套| 国产一区二区在线免费观看| 欧美激情a∨在线视频播放| 国产乱码精品一区二区三区av | 欧美一区久久| 国产精品露脸自拍| 亚洲精品免费一二三区| 久久久亚洲成人| 亚洲女优在线| 国产精品视频一| 亚洲欧美在线免费| 99视频在线精品国自产拍免费观看| 免费成人高清视频| 亚洲欧洲精品一区二区三区波多野1战4| 欧美在线观看一区| 亚洲欧美日韩一区在线| 国产精品一区免费视频| 亚洲专区一区| 亚洲一区综合| 国产日韩欧美另类| 久久天天狠狠| 欧美一级理论性理论a| 欧美日韩亚洲一区| 亚洲第一天堂av| 久久国产精品一区二区三区| 日韩天堂在线观看| 欧美岛国激情| 国产精品视频精品视频| 亚洲视频在线观看免费| 欧美黄色大片网站| 久久精品免费电影| 国产欧美视频一区二区三区| 亚洲一区二区三区视频| 亚洲人成网站777色婷婷| 久久成人综合视频| 国产欧美日韩精品在线| 亚洲欧美激情视频| 在线视频你懂得一区| 欧美日本国产一区| 一区二区三区|亚洲午夜| 99日韩精品| 好吊妞这里只有精品| 亚洲高清av| 国产精品久久久一区二区| 欧美综合国产精品久久丁香| 久久综合中文色婷婷| 一区二区三区精密机械公司| 亚洲欧美另类国产| 亚洲国产天堂久久国产91| 亚洲精品日韩一| 国产日韩欧美综合精品| 亚洲国产99| 国产嫩草影院久久久久| 亚洲第一视频| 国产欧美一区二区精品秋霞影院| 免费的成人av| 国产精品成人免费视频| 免费日本视频一区| 国产精品区一区| 亚洲国产欧美国产综合一区| 午夜久久黄色| 欧美日韩一区在线| 欧美自拍偷拍午夜视频| 欧美a级片网| 久久精品人人做人人爽| 欧美激情第二页| 久久免费视频在线观看| 欧美日精品一区视频| 欧美xxx成人| 国产精品日韩精品欧美在线| 欧美成人激情视频| 国产午夜精品理论片a级探花 | 亚洲精品乱码久久久久| 国产一区二区三区视频在线观看 | 亚洲欧美区自拍先锋| 亚洲精品免费在线播放| 久久精品综合网| 午夜精品视频在线观看| 欧美片在线观看| 亚洲第一级黄色片| 狠狠色狠色综合曰曰| 小黄鸭精品密入口导航| 亚洲一区二区三区在线视频| 欧美福利小视频| 欧美国产成人精品| 永久久久久久| 久久精品国产在热久久| 久久精品二区| 国产麻豆日韩欧美久久| 中文有码久久| 亚洲永久免费av| 欧美日韩高清在线播放| 亚洲国产精品久久久久秋霞蜜臀 | 国产日韩亚洲欧美| 亚洲午夜久久久| 亚洲一区二区三区高清不卡| 欧美日韩精品二区| 亚洲美女电影在线| 亚洲一区二区三区在线播放| 欧美三级精品| 一区二区免费在线观看| 亚洲欧美综合网| 国产午夜亚洲精品羞羞网站| 亚洲欧美综合精品久久成人| 久久精品国产69国产精品亚洲| 国产欧美日本在线| 欧美在线亚洲| 欧美大片在线影院| 99视频精品免费观看| 欧美图区在线视频| 亚洲欧美一区二区精品久久久| 久久国产精品99精品国产| 国内精品国语自产拍在线观看| 久久久999精品视频| 欧美韩国日本一区| av成人毛片| 亚洲欧洲精品一区二区三区不卡| 国产精品日日摸夜夜添夜夜av| 亚洲日本va午夜在线电影| 一区二区三区高清| 国产精品一区二区久久精品| 欧美在线观看视频在线| 久久亚洲综合| 日韩视频在线一区二区| 欧美肉体xxxx裸体137大胆| 欧美一区二区精品在线| 欧美va天堂在线| 日韩一级成人av| 国产日韩视频| 欧美另类女人| 午夜精品视频在线| 亚洲国产高清aⅴ视频| 亚洲欧美国产另类| 亚洲福利视频二区| 国产精品色午夜在线观看| 久久免费视频一区| 洋洋av久久久久久久一区| 久久人91精品久久久久久不卡| 亚洲九九精品| 好吊色欧美一区二区三区四区| 欧美日韩你懂的| 久久黄色小说| 亚洲素人在线| 亚洲国产精品嫩草影院| 欧美诱惑福利视频| 亚洲色在线视频| 亚洲国产精品成人精品| 国产精品国码视频| 欧美国产三级| 老色鬼精品视频在线观看播放| 在线天堂一区av电影| 欧美韩国日本一区| 久久国产综合精品| 先锋影音国产一区| 一区二区三区四区在线| 亚洲精品视频中文字幕| 在线观看国产精品淫| 国产一区二区高清视频| 国产精品久久久一区二区三区| 欧美激情在线观看|