摘要: (一)引出表,是将dll中所有的函数引出,并提供查询。(个人理解)(二)DLL/EXE要引出一个函数给其他DLL/EXE使用,有两种实现方法: 通过函数名引出或者仅仅通过序数引出。比如某个DLL要引出名为"GetSysConfig"的函数,如果它以函数名引出,那么其他DLLs/EXEs若要调用这个函数,必须通过函数名,就是GetSysConfig。另外一个办法就是通过序数引出。什么是序数呢? 序数是唯一指定DLL中某个函数的16位数字,在所指向的DLL里是独一无二的。例如在上例中,DLL可以选择通过序数引出,假设是16,那么其他DLLs/EXEs若要调用这个函数必须以该值作 阅读全文
posted @ 2013-08-25 11:17 Fly Hawk 阅读(456) 评论(0) 推荐(0) 编辑
摘要: (一)IMAGE_DATA_DIRECTORY STRUCT VirtualAddress dd ? isize dd ? IMAGE_DATA_DIRECTORY ENDS (二)data directory数组第二项(Import symbols)的IMAGE_DATA_DIRECTORY中的VirtualAddress包含引入表地址,这块地址是一个 IMAGE_IMPORT_DESCRIPTOR结构数组。每个结构包含PE文件引入函数的一个相关DLL的信息。比如,如果该PE文件从10个不同的DLL中引入函数,那么这个数组就有10个成员。该数组以一个全0的成员结尾。IMAGE_IMPORT_ 阅读全文
posted @ 2013-08-25 10:41 Fly Hawk 阅读(1199) 评论(0) 推荐(0) 编辑
摘要: (一)data directory 是一个 IMAGE_DATA_DIRECTORY结构数组,共有16个成员。如果您还记得节表可以看作是PE文件各节的根目录的话,也可以认为 data directory 是存储在这些节里的逻辑元素的根目录。明确点,data directory 包含了PE文件中各重要数据结构的位置和尺寸信息。每个成员包含了一个重要数据结构的信息。MemberInfo inside0Export symbols1Import symbols2Resources3Exception4Security5Base relocation6Debug7Copyright string8Un 阅读全文
posted @ 2013-08-25 10:24 Fly Hawk 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 节表:其实是一个IMAGE_SECTION_HEADERS数组。单个节表的数据大小为40IMAGE_NT_HEADERS.FileHeader.NumberOfSections指出。IMAGE_SECTION_HEADERS结构IMAGE_SECTION_HEADERSTRUCTName1dbIMAGE_SIZEOF_SHORT_NAMEdup(?);8个字节的节区名称unionMiscPhysicalAddressdd?VirtualSizedd?;节区的尺寸endsVirtualAddressdd?;节区的RVA地址SizeOfRawDatadd?;在文件中对齐后的尺寸PointerToR 阅读全文
posted @ 2013-08-25 09:34 Fly Hawk 阅读(1429) 评论(0) 推荐(0) 编辑
摘要: typedef struct _IMAGE_OPTIONAL_HEADER{//// Standard fields.//+18h WORD Magic; // 标志字, ROM 映像(0107h),普通可执行文件(010Bh)+1Ah BYTE MajorLinkerVersion; // 链接程序的主版本号+1Bh BYTE MinorLinkerVersion; // 链接程序的次版本号+1Ch DWORD SizeOfCode; // 所有含代码的节的总大小+20h DWORD SizeOfInitializedData; // 所有含已初始化数据的节的总大小+24h DWORD Si 阅读全文
posted @ 2013-08-25 09:10 Fly Hawk 阅读(1075) 评论(0) 推荐(0) 编辑
摘要: IMAGE_FILE_HEADER STRUCT Machine WORD ? NumberOfSections WORD ? TimeDateStamp dd ? PointerToSymbolTable dd ? NumberOfSymbols dd ? SizeOfOptionalHeader WORD ? Characteristics WORD ? IMAGE_FILE_HEADER ENDS Field nameMeaningsMachine该文件运行所要求的CPU。对于Intel平台,该值是IMAGE_FILE_MACHINE_I386 (14Ch)。我们尝试了LU... 阅读全文
posted @ 2013-08-25 08:57 Fly Hawk 阅读(707) 评论(0) 推荐(0) 编辑
摘要: (一)检验PE文件的有效性:检验PE中的关键数据结构是否有效。(二)我们要验证的重要数据结构就是 PE header。从编程角度看,PE header 实际就是一个 IMAGE_NT_HEADERS 结构。定义如下:IMAGE_NT_HEADERS STRUCT Signature dd ? FileHeader IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32 IMAGE_NT_HEADERS ENDS Signature一dword类型,值为50h, 45h, 00h, 00h(PE\0\0)。本域为PE标记,我们可以此识.. 阅读全文
posted @ 2013-08-25 08:30 Fly Hawk 阅读(507) 评论(0) 推荐(0) 编辑
摘要: PE文件格式的概要:DOS MZ headerDOS stubPE headerSection tableSection 1Section 2Section ...Section n 所有 PE文件(甚至32位的 DLLs) 必须以一个简单的 DOS MZ header 开始。 PE header 是PE相关结构IMAGE_NT_HEADERS的简称。在执行时,PE装载器将从 DOS MZ header 中找到 PE header 的起始偏移量。因而跳过了 DOS stub 直接定位到真正的文件头 PE header。 PE文件的真正内容划分成块,称之为sections(节)... 阅读全文
posted @ 2013-08-25 08:11 Fly Hawk 阅读(322) 评论(0) 推荐(0) 编辑