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

S.l.e!ep.¢%

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

PE 文件格式 (1)

Posted on 2009-09-12 04:55 S.l.e!ep.¢% 閱讀(2204) 評論(1)  編輯 收藏 引用 所屬分類: PE
?
PE 文件格式
?
PE. Portable Executable, 可移植的可執(zhí)行文件, 是 MS WinNT, Win95, Win32中可執(zhí)行的二進(jìn)制文件
???a.在 Win 中,驅(qū)動也是這種格式
?? b.這種文件格式由MS設(shè)計(jì)
?
1. DOS 頭是這樣的一個結(jié)構(gòu)(也叫 'MZ' 頭), 總共是 64 bytes
??? typedef struct _IMAGE_DOS_HEADER
?? {??????
??????? WORD?? e_magic;??????? // 必需為 4D 5A???? 'MZ'?? IMAGE_DOS_SIGNATURE
??????? WORD?? e_cblp;????????? // 文件最后頁的字節(jié)數(shù)???????????
??????? WORD?? e_cp;??????????? // 文件頁數(shù)
??????? WORD?? e_crlc;????????? // 重定義元素個數(shù)
??????? WORD?? e_cparhdr;???? // 頭部盡寸, 以段落為單位??????????????
??????? WORD?? e_minalloc;???? // 所需的最小附加段
??????? WORD?? e_maxalloc;??? // 所需的最大附加段
??????? WORD?? e_ss;??????????? // 初始的SS值 (相對偏移量)
??????? WORD?? e_sp;??????????? // 實(shí)始的SP值?
????????WORD?? e_csum;??????? // 校驗(yàn)和
????????WORD?? e_ip;???????????? // 初始的IP值
????????WORD?? e_cs;??????????? // 初始的CS值(相對偏移量)
????????WORD?? e_lfarlc;???????? // 重分配表文件地址
????????WORD?? e_ovno;???????? // 覆蓋號
????????WORD?? e_res[4];?????? // 保留字?
??????? WORD?? e_oemid;?????? // OEM標(biāo)識符 (相對 e_oeminfo)??????????????
??????? WORD?? e_oeminfo;???? // OEM 信息????????????????
??????? WORD?? e_res2[10];??? // 保留字
??????? LONG?? e_lfanew;?????? //? PE頭文件偏移量 , IMAGE_NT_HEADER32 結(jié)構(gòu)所在的文件地址?????????
?? }IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
???
?? (1). “MZ”是MS-DOS開發(fā)者之一的馬克·茨柏克沃斯基(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 對應(yīng) IMAGE_DOS_HEADER.e_magic 字段, 分別為 'MZ' 的 ASCII 碼
?? (2). 90 00 對應(yīng) IMAGE_DOS_HEADER.e_cblp 字段,值為 0x0090,
?? (3). 03 00 對應(yīng) IMAGE_DOS_HEADER.e_cp 字段,值為 0x0003,
?? (4). 00 00 對應(yīng) IMAGE_DOS_HEADER.e_crlc 字段,值為 0x0000
??
?? (5). 04 00 對應(yīng) IMAGE_DOS_HEADER.e_cparhdr?? 0x0004;???? // 頭部盡寸, 以段落為單位??????????????
???(6). 00 00 對應(yīng) IMAGE_DOS_HEADER.e_minalloc?? 0x0000;???? // 所需的最小附加段
???(7). FF FF 對應(yīng) IMAGE_DOS_HEADER.e_maxalloc? 0xFFFF;??? // 所需的最大附加段
???(8). 00 00 對應(yīng) IMAGE_DOS_HEADER.e_ss;???????? 0x0000???? // 初始的SS值 (相對偏移量)
???
?? 第二行:
???(9) . B8 00 對應(yīng) IMAGE_DOS_HEADER.e_sp;??? 0x00B8???????? // 實(shí)始的SP值?
???(10).00 00 對應(yīng) IMAGE_DOS_HEADER.e_csum; 0x0000?????? // 校驗(yàn)和
???(11).00 00 對應(yīng) IMAGE_DOS_HEADER.e_ip;?? 0x00????????? // 初始的IP值
???(12).00 00?對應(yīng)?IMAGE_DOS_HEADER.e_cs;? 0x00????????? // 初始的CS值(相對偏移量)
???
????(13). 40 00 對應(yīng) IMAGE_DOS_HEADER.e_lfarlc;? 0x0040??????? // 重分配表文件地址
????(14). 00 00 對應(yīng) IMAGE_DOS_HEADER.e_ovno;? 0x0000?????? // 覆蓋號
????(15). 00 00 對應(yīng) IMAGE_DOS_HEADER.e_res[4]; 0x0000????? // 保留字
??????????? 00 00
??????????? 00 00
?
??? 第三行:
????(16). 00 00
??? (17). 00 00 對應(yīng) IMAGE_DOS_HEADER.e_oemid;?????? // OEM標(biāo)識符 (相對 e_oeminfo)??
??? (18). 00 00 對應(yīng) IMAGE_DOS_HEADER.WORD?? e_oeminfo;???? // OEM 信息
????(16).?00 00 對應(yīng) 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 對應(yīng) IMAGE_DOS_HEADER.LONG?? e_lfanew;? 這里的地址為 0x000000F0 //? PE頭文件偏移量 , IMAGE_NT_HEADER32 結(jié)構(gòu)所在的文件地址
????(28).?00 00

2. DOS Stub (DOS實(shí)模式殘余程序)
?? (1). 實(shí)模式殘余程序 是一個在裝載時(shí)能夠被 MS-DOS運(yùn)行的實(shí)際程序。
?? (2). Dos Stub 只是提供了 PE 文件在DOS下面執(zhí)行時(shí),DOS會把它當(dāng)作有效的執(zhí)行文件而順利執(zhí)行。
???????? 通常 Win32 的程序會在屏幕上輸入"This Program cannot run in DOS mode"之類的提示語
?? (3). 可以隨便改變 DOS Stub, 根據(jù)自己的意圖實(shí)現(xiàn)完整的 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?? ................

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

將開頭的? 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 退出, 再執(zhí)行,就會顯示 '?This program cannot be run in DOS?mode?'
原因暫時(shí)未知.

Feedback

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

2009-09-13 11:41 by 99書城
按時(shí)間愛的世界
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产精品一区2区| 欧美一区二区高清| 国产一区二区三区高清播放| 国产精品入口福利| 在线视频国内自拍亚洲视频| 亚洲精品视频一区| 午夜精品久久久久久久久| 久久午夜电影网| 亚洲第一在线视频| 亚洲精选中文字幕| 先锋a资源在线看亚洲| 免费久久99精品国产| 国产精品久久久久99| 在线看片成人| 午夜久久资源| 亚洲国产精品一区在线观看不卡| 亚洲网站在线播放| 免费看黄裸体一级大秀欧美| 欧美亚州在线观看| 亚洲国产精品电影| 欧美在线国产精品| 亚洲精品视频在线播放| 久久gogo国模裸体人体| 欧美伦理视频网站| 尤物yw午夜国产精品视频| 亚洲欧美国产va在线影院| 欧美成人国产va精品日本一级| 中文一区字幕| 欧美二区在线看| 国内激情久久| 亚洲午夜精品在线| 亚洲国产精品嫩草影院| 欧美在线免费看| 欧美日韩麻豆| 亚洲激情成人| 久久久精品动漫| 亚洲午夜视频| 欧美日韩美女一区二区| 亚洲第一色中文字幕| 久久超碰97人人做人人爱| 99日韩精品| 欧美国产精品| 亚洲国产三级网| 久久亚洲美女| 香蕉久久一区二区不卡无毒影院| 欧美成人dvd在线视频| 狠狠干成人综合网| 欧美在线观看一区| 国产精品99久久久久久有的能看| 欧美紧缚bdsm在线视频| 亚洲国产成人久久| 久久躁日日躁aaaaxxxx| 欧美一级免费视频| 另类图片国产| 亚洲大片免费看| 久久乐国产精品| 激情欧美一区二区三区在线观看| 欧美一区二区三区啪啪| 999亚洲国产精| 欧美美女bbbb| 亚洲最新合集| 91久久精品一区二区别| 欧美成人综合网站| 亚洲欧洲在线免费| 亚洲第一偷拍| 欧美精品激情| 99xxxx成人网| 日韩午夜免费视频| 欧美三级乱码| 亚洲欧美日韩国产综合| 亚洲一二三级电影| 国产精品亚洲аv天堂网| 午夜精品福利在线| 性色av一区二区三区在线观看| 国产精品影片在线观看| 性欧美1819sex性高清| 亚洲欧美国产高清va在线播| 国产精品视频精品视频| 欧美呦呦网站| 久久精品人人做人人爽| 好看的日韩av电影| 免费日韩av电影| 免费久久99精品国产自| 一区二区冒白浆视频| 亚洲视频在线视频| 国产欧美亚洲日本| 久久成人精品无人区| 久久精品亚洲一区二区三区浴池| 激情久久婷婷| 欧美国产先锋| 欧美日韩一区高清| 欧美一区深夜视频| 久久久噜噜噜久久久| 最新亚洲激情| 在线午夜精品自拍| 国产一区视频观看| 久久综合中文色婷婷| 久久九九99| 亚洲国产第一| 日韩视频免费大全中文字幕| 国产精品久久久久一区| 久久久久久**毛片大全| 欧美a级一区| 亚洲欧美精品一区| 久久九九热re6这里有精品| 亚洲精品在线看| 中文无字幕一区二区三区| 国产亚洲美州欧州综合国| 欧美国产日产韩国视频| 久久久久国产精品厨房| 久久一区亚洲| 免播放器亚洲| 国产精品毛片在线| 欧美96在线丨欧| 国产精品s色| 美女主播一区| 欧美日韩精品欧美日韩精品 | 亚洲五月婷婷| 午夜精品久久久久| 亚洲欧洲精品一区二区三区不卡| 国产精品99久久久久久宅男 | 在线精品一区| 亚洲一区二区三区久久| 亚洲国产成人久久综合| 亚洲砖区区免费| 136国产福利精品导航网址应用 | 91久久精品一区| 国产欧美日韩视频在线观看| 欧美国产三区| 国产免费成人| 亚洲人成亚洲人成在线观看图片 | 久久精品一区二区三区中文字幕| 99re热这里只有精品视频| 亚洲欧美日韩在线不卡| 亚洲第一久久影院| 亚洲欧美视频一区| 亚洲黄色影院| 久久福利影视| 亚洲欧美日韩在线播放| 欧美国产免费| 另类尿喷潮videofree| 国产精品久久久免费| 亚洲高清色综合| 狠狠色伊人亚洲综合网站色| 亚洲午夜国产一区99re久久 | 亚洲精选91| 欧美有码在线视频| 午夜精品久久久久久久久久久久| 欧美精品乱人伦久久久久久| 美女视频网站黄色亚洲| 国产精品捆绑调教| 亚洲人成人77777线观看| 亚洲高清影视| 久久久精品999| 久久国产精品亚洲va麻豆| 国产精品porn| 欧美国产亚洲视频| 亚洲高清在线播放| 久久天堂精品| 麻豆成人在线观看| 国产日韩欧美一区二区三区四区| 99re这里只有精品6| 91久久在线观看| 老司机精品视频网站| 久久人人爽人人爽爽久久| 国产日韩欧美日韩| 亚洲人人精品| 91久久夜色精品国产网站| 伊人成人在线视频| 久久精品亚洲国产奇米99| 久久精品二区| 国产一区久久| 久久精品视频在线| 麻豆国产精品一区二区三区| 国产在线拍偷自揄拍精品| 午夜久久久久| 久久精品国产一区二区三区免费看| 国产精品日韩欧美一区二区三区| 日韩视频三区| 亚洲一区二区伦理| 国产精品久久久久一区二区三区共| 亚洲午夜视频| 欧美一区永久视频免费观看| 国产伦精品一区二区三区免费迷| 亚洲女同同性videoxma| 久久精品国产99| 好吊日精品视频| 久久夜色精品| 亚洲第一在线| 亚洲色图在线视频| 国产精品免费观看视频| 午夜电影亚洲| 久久综合导航| 亚洲高清久久网| 欧美日韩国产大片| 亚洲一区久久久| 久久gogo国模裸体人体| 国模精品一区二区三区色天香| 久久久久久久一区| 亚洲第一精品在线|