Hi there 👋

Welcome to my blog

PE文件结构学习0x02 - 详解 DOS Stub

介绍 上一篇文章我们深入了解了DOS Header,其中我们谈到了它的一个重要作用 —— 向后兼容 MS-DOS 系统(在 MS-DOS 模式下运行时,会运行 DOS Stub 里的 DOS 程序)。那么 DOS Stub 是个怎样的 DOS 程序,这篇文章就让我们来一探究竟。 DOS Stub 概述 DOS Stub 紧跟在 DOS 头之后,位于 NT 头之前。DOS Stub 区域从偏移 0x40(DOS Header 结束处)开始,到 e_lfanew 指定位置(PE 头)之前的一段空间。在 DOS 环境下运行时,它会打印出 “This program cannot be run in DOS mode” 的错误消息。 在 PE-bear 查看这部分: DOS 环境测试 PE DOS 环境:DOSBox 在 DOS 环境运行测试程序: 在正常的CMD环境运行测试程序: 可以看到在 DOS 环境下打印了“This program cannot be run in DOS mode.”,DOS Stub 被执行了。 ...

April 26, 2025 · ninana27

PE文件结构学习0x01 - 深入DOS Header并将其打印

介绍 上一篇文章我们简要地介绍了PE文件结构,这篇文章将深入学习它的第一部分 DOS Header,并用 C 语言打印详细信息。 DOS Header 概述 PE 文件起源于 MS-DOS 可执行文件格式,因此保留了一个兼容结构 —— DOS Header(也称为 MS-DOS Header ),是一个 64 字节长的结构,即 IMAGE_DOS_HEADER。我们可以借助 PE-bear 查看DOS Header这部分: 这部分在现代 Windows 程序中虽然已不再负责运行程序的主要功能,但仍然起到两个重要作用: 向后兼容 MS-DOS 系统(在 MS-DOS 模式下运行时,会运行 DOS Stub 里的 DOS 程序) 指出真正的 PE 头(NT Header)在文件中的位置 IMAGE_DOS_HEADER IMAGE_DOS_HEADER是一个 64 字节长的结构体,我们可以在 Windows SDK 的 winnt.h 头文件中找到 IMAGE_DOS_HEADER 的结构定义: typedef struct _IMAGE_DOS_HEADER { // DOS .EXE header WORD e_magic; // Magic number WORD e_cblp; // Bytes on last page of file WORD e_cp; // Pages in file WORD e_crlc; // Relocations WORD e_cparhdr; // Size of header in paragraphs WORD e_minalloc; // Minimum extra paragraphs needed WORD e_maxalloc; // Maximum extra paragraphs needed WORD e_ss; // Initial (relative) SS value WORD e_sp; // Initial SP value WORD e_csum; // Checksum WORD e_ip; // Initial IP value WORD e_cs; // Initial (relative) CS value WORD e_lfarlc; // File address of relocation table WORD e_ovno; // Overlay number WORD e_res[4]; // Reserved words WORD e_oemid; // OEM identifier (for e_oeminfo) WORD e_oeminfo; // OEM information; e_oemid specific WORD e_res2[10]; // Reserved words LONG e_lfanew; // File address of new exe header } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; 这段结构体包含多个字段,对于 PE 文件在 MS-DOS 模式下运行时非常重要,但接下来不会介绍所有的字段,只介绍几个关键的字段。 ...

April 24, 2025 · ninana27

PE文件结构学习0x00 - 初识PE

前言 这是学习PE文件结构的开始,学习PE文件结构旨在了解 PE 文件的基本概念和重要性,并尝试编程手动解析 PE 文件。 认识PE以及PE文件格式 PE(Portable Executable):可移植性可执行文件。 PE文件格式是一种可用于32位和64位 Windows 操作系统以及 UEFI 环境的程序文件格式,它是基于Windows NT 的系统上可执行文件的标准格式,是微软在 COFF(Common Object File Format)基础上发展而来的格式。常见的PE文件有:可执行程序.exe, 动态链接库.dll, 驱动程序.sys 等。 PE 文件是一种数据结构,它保存了 Windows 操作系统加载器(PE装载器)将可执行文件映射到内存中并执行所需的信息。 PE文件结构概览 一个 PE 文件的结构大致如下: +-------------------------------------------+ | DOS Header | +-------------------------------------------+ | DOS Stub | +-------------------------------------------+ | NT Headers: | | +------------------------------------+ | | |PE Signature | | | +------------------------------------+ | | |File Header | | | +------------------------------------| | | |Optional Header | | | +------------------------------------+ | +-------------------------------------------+ | Section Table | +-------------------------------------------+ | Section 1 (.text) | +-------------------------------------------+ | Section 2 (.rdata) | +-------------------------------------------+ | Section 3 (.data) | +-------------------------------------------+ | ... | +-------------------------------------------+ 我们可以借助一些工具来直观查看和分析 PE 文件结构,比如使用 PE-bear来查看PE文件的大致结构: ...

April 23, 2025 · ninana27

First Post

Hello world! Code int main() { printf("Hello world!"); return 0; }

April 17, 2025 · ninana27