首页 > 其他分享 >2、标准PE头 IMAGE_FILE_HEADER

2、标准PE头 IMAGE_FILE_HEADER

时间:2024-12-19 19:59:03浏览次数:2  
标签:IMAGE MACHINE HEADER FILE PE define

2、标准PE头 IMAGE_FILE_HEADER

这里看过了PE初始的文章,了解了ImageNtHead结构体的构成,我们就可以知道。IMAGE_FILE_HEADER文件的位置了,。其实她的位置就是再IMAGE_NT_HEAD的第二个成员。代码如下

typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;  				// 程序运行平台
    WORD    NumberOfSections;		// PE中节(IMAGE_SECTION_HEADER)的数量
    DWORD   TimeDateStamp;  		// 时间戳
    DWORD   PointerToSymbolTable;	// COFF符号表中文件的偏移  没啥用
    DWORD   NumberOfSymbols;		// 符号表中符号的数量  没啥用
    WORD    SizeOfOptionalHeader;	// 扩展PE头的大小 
    WORD    Characteristics;		// PE文件属性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

这里要提一下。IMAGE_FILE_HEADER 是一个固定大小的。她的大小是20个字节,有一个宏如下其实就是标记我们标准头的大小的。以后可以经常使用这个要舒服很多

#define IMAGE_SIZEOF_FILE_HEADER             20

其中第一个成员介绍如下,

#define IMAGE_FILE_MACHINE_UNKNOWN           0
#define IMAGE_FILE_MACHINE_TARGET_HOST       0x0001  // Useful for indicating we want to interact with the host and not a WoW guest.
#define IMAGE_FILE_MACHINE_I386              0x014c  // Intel 386.
#define IMAGE_FILE_MACHINE_R3000             0x0162  // MIPS little-endian, 0x160 big-endian
#define IMAGE_FILE_MACHINE_R4000             0x0166  // MIPS little-endian
#define IMAGE_FILE_MACHINE_R10000            0x0168  // MIPS little-endian
#define IMAGE_FILE_MACHINE_WCEMIPSV2         0x0169  // MIPS little-endian WCE v2
#define IMAGE_FILE_MACHINE_ALPHA             0x0184  // Alpha_AXP
#define IMAGE_FILE_MACHINE_SH3               0x01a2  // SH3 little-endian
#define IMAGE_FILE_MACHINE_SH3DSP            0x01a3
#define IMAGE_FILE_MACHINE_SH3E              0x01a4  // SH3E little-endian
#define IMAGE_FILE_MACHINE_SH4               0x01a6  // SH4 little-endian
#define IMAGE_FILE_MACHINE_SH5               0x01a8  // SH5
#define IMAGE_FILE_MACHINE_ARM               0x01c0  // ARM Little-Endian
#define IMAGE_FILE_MACHINE_THUMB             0x01c2  // ARM Thumb/Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_ARMNT             0x01c4  // ARM Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_AM33              0x01d3
#define IMAGE_FILE_MACHINE_POWERPC           0x01F0  // IBM PowerPC Little-Endian
#define IMAGE_FILE_MACHINE_POWERPCFP         0x01f1
#define IMAGE_FILE_MACHINE_IA64              0x0200  // Intel 64
#define IMAGE_FILE_MACHINE_MIPS16            0x0266  // MIPS
#define IMAGE_FILE_MACHINE_ALPHA64           0x0284  // ALPHA64
#define IMAGE_FILE_MACHINE_MIPSFPU           0x0366  // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU16         0x0466  // MIPS
#define IMAGE_FILE_MACHINE_AXP64             IMAGE_FILE_MACHINE_ALPHA64
#define IMAGE_FILE_MACHINE_TRICORE           0x0520  // Infineon
#define IMAGE_FILE_MACHINE_CEF               0x0CEF
#define IMAGE_FILE_MACHINE_EBC               0x0EBC  // EFI Byte Code
#define IMAGE_FILE_MACHINE_AMD64             0x8664  // AMD64 (K8)
#define IMAGE_FILE_MACHINE_M32R              0x9041  // M32R little-endian
#define IMAGE_FILE_MACHINE_ARM64             0xAA64  // ARM64 Little-Endian
#define IMAGE_FILE_MACHINE_CEE               0xC0EE

这个平台的值就是说明再那个平台运行的。

第二个成员是 NumberOfSections 表示PE文件中节区的总数。(非常重要)

第六个成员 SizeOfOptionalHeader 是扩展PE头的大小,这个非常重要一定要记住其他的就没了。

下面写一下,代码打印标准PE头首位

VOID PrintFileHeader()
{
	//文件读取到内存中
	DWORD dwFileSize = 0;
	PCHAR fileBuff = fileToMem(&dwFileSize);
	if (!fileBuff)
	{
		log_error("fileToMem error");
		return;
	}
	// 定位标准PE头
	PIMAGE_DOS_HEADER pImgDosHeader = (PIMAGE_DOS_HEADER)fileBuff;
	PIMAGE_NT_HEADERS pImgNtHeader = (PIMAGE_NT_HEADERS)(fileBuff + pImgDosHeader->e_lfanew);
	PIMAGE_FILE_HEADER pImgFileHeader = (PIMAGE_FILE_HEADER)((PCHAR)pImgNtHeader + 4);
	//WORD    Machine;
	//WORD    NumberOfSections;
	//DWORD   TimeDateStamp;
	//DWORD   PointerToSymbolTable;
	//DWORD   NumberOfSymbols;
	//WORD    SizeOfOptionalHeader;
	//WORD    Characteristics;
	printf("Machine              %#x\n", pImgFileHeader->Machine);
	printf("NumberOfSections     %#x\n", pImgFileHeader->NumberOfSections);
	printf("TimeDateStamp        %#x\n", pImgFileHeader->TimeDateStamp);
	printf("PointerToSymbolTable %#x\n", pImgFileHeader->PointerToSymbolTable);
	printf("NumberOfSymbols      %#x\n", pImgFileHeader->NumberOfSymbols);
	printf("SizeOfOptionalHeader %#x\n", pImgFileHeader->SizeOfOptionalHeader);
	printf("Characteristics      %#x\n", pImgFileHeader->Characteristics);
}

标签:IMAGE,MACHINE,HEADER,FILE,PE,define
From: https://www.cnblogs.com/blogwr/p/18617845/2-standard-pe-head-imagefileheader-zxxsqy

相关文章

  • 3、节表 IMAGE_SECTION_HEADERS
    3、节表IMAGE_SECTION_HEADERS节表是IMAGE_SECTION_HEADER,首先看一下C语言结构体中是什么样子的。typedefstruct_IMAGE_SECTION_HEADER{BYTEName[IMAGE_SIZEOF_SHORT_NAME];union{DWORDPhysicalAddress;DWORDVirtualSize;......
  • Filebeat 配置:核心参数优化指南
    文章目录一、输入配置(filebeat.inputs)(一)文件扫描与回退机制(二)文件处理与关闭策略二、队列配置(queue)(一)内存队列(mem)(二)磁盘队列(spool)三、CPU使用限制设置在Filebeat的配置优化过程中,以下各项参数的合理设置对其性能和功能有着关键影响:一、输入配置(filebeat.input......
  • python报错:No pyvenv.cfg file
    目录一、遇到问题二、出现问题的原因三、解决步骤一、遇到问题新建python项目运行的时候发现了报错这个,之前运行或者给别人运行就没问题,排除了是代码报错,那就只有可能是环境问题了。这个翻译就是缺失这个文件,项目如下 Nopyvenv.cfgfile项目还有这个.venv文件.v......
  • 【Python】调用 image.verify() 后报错 AttributeError_ ‘PngImageFile‘ object has
    【Python】调用image.verify()后报错AttributeError:‘PngImageFile’objecthasnoattribute‘load_seek’问题描述file=request.files.get('file')iffile:file_content=file.read()file_stream=BytesIO(file_content)......
  • 使用dockerfile构建python3的镜像并启动容器另一种方式
    使用dockerfile构建python3的镜像并启动容器另一种方式1.新建目录DockerfilesmkdirDockerfilescdDockerfiles2.新建文件DockerfiletouchDockerfile写入以下内容:FROMcentos:7.6.1810MAINTAINERtest#指定作者信息RUNset-ex\#预安装所需组件&......
  • How to enable core file dumps when an application crashes or segmentation faults
    OriginalarticleEnvironmentRedHatEnterpriseLinux5RedHatEnterpriseLinux4RedHatEnterpriseLinux3ForRedHatEnterpriseLinux6,7,8,9,pleaserefertheNOTEintheresolutionsection.IssueHowtoenablecorefiledumpswhenanapplic......
  • 鸿蒙+next+基于@xwf+image_preview+V1
    鸿蒙next基于@xwf/image_preview(V1.0.1)开发自己的功能@xwf/image_preview(V1.0.1)的链接为:https://ohpm.openharmony.cn/#/cn/detail/@xwf%2Fimage_preview/v/1.0.1前提背景图片预览我们使用到了@xwf/image_preview库,用于预览图片可以进行手势放大,但是我们需要以弹窗的形......
  • CVPR-23 Towards Universal Fake Image Detectors that Generalize Across Generative
    论文标题:TowardsUniversalFakeImageDetectorsthatGeneralizeAcrossGenerativeModels论文链接:https://arxiv.org/abs/2302.10174 01摘要翻译随着生成模型的快速发展,人们对通用假图像检测器的需求日益增长。在这项工作中,我们首先展示了现有的模式,即训练一个深......
  • java中的FileReader和FileWriter类
    一、介绍使用FileOutputStream类向文件中写入数据与使用FileInputStream类从文件中将内容读出来,都存在一点不足,即这两个类都只提供了对字节或字节数组的读取方法。由于汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用字节流Reader或Writer类即可避......
  • Flutter OHOS flutter_image_crop(图片裁剪)
    Flutter的图片裁剪插件该插件附带一个Crop小部件。该小部件仅渲染图像、叠加层和用于裁剪图像的句柄。因此,它可以与其他小部件组合以构建自定义图像裁剪体验。使用创建一个小部件来加载和编辑图像:finalcropKey=GlobalKey<CropState>();Widget_buildCropImage(){r......