PE文件和COFF文件格式分析--概述
? ? ? ? 剛工作的時候,我聽說某某大牛在做病毒分析時,只是用notepad打開病毒文件,就能大致猜到病毒的工作原理。當時我是佩服的很啊,同時我也在心中埋下了一個種子:我也得有這天。隨著后來的工作進行,一些任務的和這個理想有了交集,這得以讓我有足夠的時間和精力去細細研究PE文件和COFF文件格式。(轉載請指明出處)
? ? ? ? 如果有一定的英語基礎的朋友,可以查看微軟原稿(http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx)。如果沒什么耐性去讀,可以去讀我即將編寫的《PE文件和COFF文件格式分析》系列博文,同時我用VC去解析一些文件。這兒補充說明下,微軟原稿中有一頁是一些免責聲明,大概就是說微軟可能會在之后修改這些文件結構,而不會通知到你。我對PE和COFF文件格式的研究是基于原稿8.2版本的,可能若干年后,我這兒寫的東西就存在不對的地方了。之后我們切入正題。
? ? ? ?PE的全稱是Portable Executable,用中文就是“可移植、可執行的”。從這個名字可以看出PE文件格式是一種文件格式標準,該標準并不局限于Windows某個平臺,因為它是“可移植”的。比如我們在xp下編寫的程序,一般可以沒有問題的放在Win7的系統上跑。這個特性非常重要,它讓windows平臺軟件提供了延續性的可能,否則軟件廠商要為不同系統編寫或者生成不同的程序,這無疑增加了軟件提供商的負擔,同時這也大大降低了軟件傳播的速度。“可執行性”是說這個文件是中承載著可以被CPU執行的指令,而不是像TXT這樣的只是承載著數據。
? ? ? ? COFF的全稱是Common Object File Format,用中文描述是“通用對象文件結構”。此處特別注意“對象”這個用詞,如果研讀過PECOFF原稿的朋友,可以發現,文中介紹一些屬性時,區分了Image和Object兩種文件的情況。對編譯鏈接有一定了解的朋友應該知道,我們編寫的C++對象文件,先會被編譯成為一個和文件同名且格式為obj的文件,然后鏈接器會將這些obj文件鏈接成Exe或者DLL這樣的PE文件。這里的obj文件就是COFF格式的。
? ? ? ? 如之前介紹的,我們編寫的PE文件很可能是由COFF文件鏈接而成,那么PE和COFF之間有什么關系呢?PE文件中包含COFF格式頭,這個頭的信息非常重要,我會在之后介紹。
以上是經典的PE文件格式
以上是經典的COFF文件格式
? ? ? ?之后我們會討論更詳細的信息。
總結
以上是生活随笔為你收集整理的PE文件和COFF文件格式分析--概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一种注册表沙箱的思路、实现——研究Rea
- 下一篇: PE文件和COFF文件格式分析--MS-