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

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.¢% 閱讀(2204) 評論(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>
            国产精品揄拍一区二区| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲一区二区免费看| 亚洲国产日韩欧美在线动漫| 香蕉免费一区二区三区在线观看 | 欧美激情国产精品| 国产日韩成人精品| 一个人看的www久久| 亚洲精品乱码久久久久久按摩观 | 国产欧美91| 亚洲天堂av图片| 99这里只有精品| 欧美成人蜜桃| 亚洲第一区中文99精品| 伊人精品视频| 久久久久久网站| 久久人人97超碰人人澡爱香蕉| 国产精品美女久久久久久免费| 亚洲日韩欧美视频一区| 亚洲福利视频网站| 久久夜色精品国产欧美乱极品 | 亚洲欧美日韩国产中文| 欧美日韩1区2区3区| 亚洲精品国产精品乱码不99| 亚洲国产欧美日韩另类综合| 久久久久久**毛片大全| 麻豆91精品| 国内激情久久| 久久午夜国产精品| 美国三级日本三级久久99| 韩国一区二区在线观看| 久久精品99国产精品酒店日本| 久久国产精品毛片| 国产日韩欧美精品| 久久国产精品久久精品国产| 久久久久久久欧美精品| 激情综合视频| 久久综合久色欧美综合狠狠 | 久久亚洲精品一区二区| 国产午夜精品美女毛片视频| 久久九九全国免费精品观看| 欧美成人精品影院| 亚洲精品网址在线观看| 欧美日韩一卡| 午夜久久黄色| 欧美+日本+国产+在线a∨观看| 亚洲三级性片| 国产精品swag| 久久久久国内| 亚洲欧洲精品一区二区三区波多野1战4 | 欧美ab在线视频| 日韩亚洲精品在线| 国产精品美女在线| 久久国产精品一区二区三区| 亚洲激情啪啪| 亚洲欧美中日韩| 尤物视频一区二区| 欧美男人的天堂| 亚洲欧美日韩中文播放| 欧美 日韩 国产在线| 亚洲一区免费观看| 好吊日精品视频| 欧美啪啪成人vr| 午夜精品久久久久久久蜜桃app | 久久久亚洲欧洲日产国码αv | 久久国内精品视频| 91久久综合| 久久国产精品久久国产精品 | 最新日韩中文字幕| 国产精品久久久久久久久搜平片| 欧美专区中文字幕| 亚洲精品日韩一| 乱人伦精品视频在线观看| aⅴ色国产欧美| 尤物网精品视频| 国产伦精品一区二区三区免费迷 | 久久视频在线免费观看| 一区二区三区日韩| 亚洲国产精品电影| 久久久水蜜桃av免费网站| 亚洲色图在线视频| 在线观看成人小视频| 国产精品美女www爽爽爽| 能在线观看的日韩av| 久久xxxx| 亚洲欧美日韩另类精品一区二区三区 | 一区二区精品在线观看| 欧美不卡在线| 久久一区视频| 欧美在线免费视屏| 亚洲小说区图片区| 亚洲精品视频一区二区三区| 在线欧美一区| 韩国成人精品a∨在线观看| 国产精品久久久久77777| 欧美jizzhd精品欧美巨大免费| 欧美在线国产精品| 亚洲视频一区在线观看| 亚洲九九九在线观看| 亚洲电影在线看| 欧美国产精品专区| 美女成人午夜| 免费日韩av片| 欧美freesex8一10精品| 久久亚洲精品视频| 久久综合九色99| 久久嫩草精品久久久精品一| 久久电影一区| 久久午夜精品一区二区| 久久精品国产精品亚洲| 欧美一区影院| 久久久久国产免费免费| 久久久国产亚洲精品| 久久一本综合频道| 久久综合中文色婷婷| 老司机久久99久久精品播放免费| 久久久91精品| 久久综合九色综合久99| 欧美fxxxxxx另类| 亚洲电影在线播放| 亚洲精品一区中文| 亚洲视频1区2区| 亚洲欧美日韩中文在线制服| 欧美在线网址| 免费看精品久久片| 欧美日韩国产在线观看| 欧美丝袜一区二区| 国产精品一区二区在线观看不卡 | 国产精品一二一区| 国产视频久久久久久久| 激情校园亚洲| 日韩网站在线看片你懂的| 中国女人久久久| 午夜欧美精品| 麻豆乱码国产一区二区三区| 亚洲二区在线| 亚洲伊人伊色伊影伊综合网| 欧美一级在线视频| 美女被久久久| 欧美体内she精视频| 国产一区二区三区视频在线观看 | 午夜亚洲一区| 免费视频一区| 一区二区久久| 久久久蜜臀国产一区二区| 欧美精品999| 国产欧美日本一区视频| 在线高清一区| 午夜精品久久久久久久99黑人| 久久国产精品久久w女人spa| 亚洲高清激情| 午夜精品久久久久| 欧美精品v日韩精品v韩国精品v| 国产精品99免费看| 影音先锋日韩资源| 亚洲免费人成在线视频观看| 久久午夜激情| 亚洲一级黄色| 欧美激情精品久久久久久大尺度| 国产美女精品一区二区三区| 亚洲精品女av网站| 久久久99久久精品女同性| 亚洲国产日韩一区二区| 欧美一级片久久久久久久| 欧美精品一二三| 极品中文字幕一区| 亚洲欧美第一页| 亚洲日本在线视频观看| 久久久久久9| 国产一区二区三区在线观看精品| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 99re6热在线精品视频播放速度 | 久久av一区二区三区漫画| 亚洲全黄一级网站| 久久蜜桃资源一区二区老牛| 国产精品每日更新在线播放网址| 亚洲精品一区在线观看| 欧美成年人网站| 久久国产精品黑丝| 国产婷婷色一区二区三区四区| 一本色道久久综合亚洲精品小说| 欧美二区视频| 久久免费精品视频| 国产在线观看精品一区二区三区| 亚洲一区三区电影在线观看| 亚洲三级免费| 欧美成人tv| 亚洲国产婷婷综合在线精品| 麻豆国产va免费精品高清在线| 午夜一区二区三区不卡视频| 国产精品色午夜在线观看| 亚洲手机成人高清视频| 亚洲精品欧美日韩| 欧美激情综合在线| 一本色道久久88精品综合| 亚洲全黄一级网站| 欧美日韩视频在线第一区| 日韩视频精品在线| 亚洲激情在线播放| 欧美日韩一区二区三区视频|