谈谈PE和ELF结构中的那些小事

来源:互联网 发布:学编程可以做什么 编辑:程序博客网 时间:2024/04/29 06:41

如何区分32bit和64bitPE文件

IMAGE_FILE_HEADER->Machine
可执行文件的目标CPU。通常的值是:
IMAGE_FILE_MACHINE_I386 0x014c // Intel 386
IMAGE_FILE_MACHINE_IA64 0x020B // Intel 64
IMAGE_FILE_MACHINE_IA64 0x8664 // Intel 64
……

PE结构中如何告诉系统是否需要动态基址

IMAGE_OPTIONAL_HEADER->DllFlags
DllFlags[6]决定。

DLL Characteristics:

Value 含义 8000 Terminal Server aware 2000 WDM driver 0800 No bind 0400 No SEH 0200 No isolation 0100 NX compatible 0080 Force integrity 0040 Dynamic base动态基址

PE结构如何区分dll和exe?

IMAGE_FILE_HEADER->Characteristics
Characteristics[13]决定。

Hi高位数据 含义 8000 Bytes reversed hi 4000 Uniprocessor only 2000 是DLL 0800 Patch on net 0400 Patch on removable 0200 Debug stripped 0100 32 bit machine Lo低位数据 含义 0080 Bytes reversed lo 0040 ??? 0020 Handle >2Gb address 0010 Agressively trim set 0008 Symbols stripped 0004 Line numbers stripped 0002 Executable 0001 Relocations stripped

PE中一个特别的点:e_lfanew

它似乎保持指向DOS头后面,但确实没有规定e_lfanew必须指向后面,所以你可以通过将e_lfanew指向到DOS头来完成一段“压缩”。
同样的ELF头部起+2,+3位置没有被使用,也可以用做存储一些隐蔽数据。

以上数据部分从ExeInfoPe中找出来的。

1 0
原创粉丝点击