小甲鱼的PE结构网页内容整理
pikafish源码解读

pikafish源码解读Pikafish是一个开源项目,它是一个基于Python的Web框架。
下面我将从多个角度对Pikafish的源码进行解读。
1. 结构解读:Pikafish的源码结构清晰,主要包括核心框架代码、路由处理、请求处理、视图渲染等模块。
核心框架代码包括应用启动、路由注册、中间件处理等功能。
路由处理模块负责将URL与对应的处理函数进行映射。
请求处理模块负责解析HTTP请求,提取请求参数等。
视图渲染模块负责将处理结果渲染为HTML页面返回给客户端。
2. 框架原理:Pikafish采用了基于装饰器的路由注册方式,通过将URL与对应的处理函数进行映射,实现了请求的分发。
它还支持中间件机制,可以在请求处理前后进行一些额外的处理,如身份验证、日志记录等。
Pikafish还实现了模板引擎,可以方便地将数据与HTML模板进行结合,生成最终的页面。
3. 关键代码解读:在核心框架代码中,应用启动的部分会创建一个HTTP服务器,并监听指定的端口。
路由注册的部分会将URL与对应的处理函数进行映射,可以使用装饰器来简化这个过程。
请求处理的部分会解析HTTP请求,提取请求方法、路径、参数等信息。
视图渲染的部分会将处理结果渲染为HTML页面,并返回给客户端。
4. 扩展性分析:Pikafish的源码设计具有良好的扩展性。
你可以添加自定义的中间件来扩展框架的功能,也可以自定义路由规则来满足特定的需求。
此外,Pikafish还支持数据库访问等常见功能的扩展,可以根据实际需求选择适合的扩展插件。
5. 性能考量:Pikafish在设计上追求简洁高效,代码量较小,因此在性能方面表现良好。
它采用异步非阻塞的处理方式,可以处理大量并发请求。
此外,Pikafish还支持缓存、静态文件处理等性能优化功能,可以进一步提升应用的性能。
总结:通过对Pikafish源码的解读,我们可以了解到它是一个功能丰富、易于扩展、性能优越的Python Web框架。
小甲鱼OD知识

PE文件结构
PE文件结构:
DOS header DOS stub
PE File Header
Image Optional Header Section Table Data Directories Sections
No picture you say a J8„
小结
GetModuleHandleA 这 个 API 函 数 用 于 获 取 程 序 的 ImageBase(基址) 这个程序的 MessageBox 的 OwnerHandle (父窗口句柄) 为 0 ( NULL ),我们可以将这个值改为一个不存在的 值,例如 1 ,这样它就找不到老豆,就不会被显示出 来。 名词注释:
关于cmp指令
cmp指令格式:cmp dest, src cmp 指令比较dest和src 两个操作数,并通过比较结果设置 C/ O/Z 标志 位。 cmp指令大概有以下几种格式:
cmp eax, ebx ;如果相等,Z标志位置1,否则0. cmp eax, [404000] ;将eax和404000地址处的dword型数据相比较并同上置位。 cmp [404000], eax ;同上。
400085h 404000h
400080h
关于mov指令
mov指令格式:mov dest, src 这是一个很容易理解的指令,mov指令将src的内容拷 贝到dest,mov指令总共有以下几种扩展:
movs/movsb /movsw/movsd edi,esi:这些变体按串/字节/字/双字为单位将esi寄存器 指向的数据复制到edi寄存器指向的空间。 movsx符号位扩展,byte->word,word->dword (扩展后高位全用符号位填充),然后 实现mov。 movzx零扩展,byte->word,word->dword(扩展后高位全用0填充),然后实现mov。
PE文件结构详细说明

PE文件结构详细说明今天看这个PE文件结构真是好晕,不过还好,勉强看得明白。
就是这里面参数太多了,越看越悬乎了,哎,郁闷哦,这不,干脆来总结一下。
帮助自己理解。
不要急,慢慢来,先去喝杯水,现在整点报时,嘀嘀嘀嘀嘟。
现在是重庆时间2-14号4:21。
啊!冒视是情人节!再郁闷一下。
好了,水喝好了。
不吹废话了,言归正传。
说到PE文件结构,其实两天前我自己只是知道这么个东西,知道里面装了一些我不知道的但是很重要的东西。
这几天看Windows核心编程,看到这一节,看了3遍,晕,第一次看了觉得有那么个印象了,第二次看了就发现有些问题还不大明白,开始模糊了,第3次看了把一些疑虑搞定了,但是还是有些问题仍然模糊中。
哎!都怪自己太菜。
(可能是菜吃的太多的缘故:))。
又跑题了,再次言归正传。
先看看PE文件结构总体层次分布吧,我这里没有网络,本想在网上找个粘贴过来的,哎,只能是梦想,来自己画一个吧,建议你也自己画一下,加深印象。
(甜菜们跳过。
)。
画画中。
终于画完了,嘿嘿,现在时间5:09分。
看看这个图吧,什么感觉,是不是有点晕。
呵呵,反正我刚开始看这玩意儿的时候是这么个感觉,多看几次也就习惯了,嘿嘿。
先看看吧,有个印象。
现在继续深层次的解剖,就从DOS MZ Header 开始吧。
DOS MZ Header是一个IMAGE_DOS_HEADER类型的数据结构。
下面这就是IMAGE_DOS_HEADER数据结构的C语言定义,这个定义可以在winnt.h中找到。
结构大小=30*sizeof(WORD)+sizeof(LONG),sizeof(WORD)为2字节,sizeof(LONG)=4字节,所以整个IMAGE_DOS_HEADER大小为64字节。
typedef struct _IMAGE_DOS_HEADER { // DOS .EXE headerWORD e_magic; // Magic numberWORD e_cblp; // Bytes on last page of fileWORD e_cp; // Pages in fileWORD e_crlc; // RelocationsWORD e_cparhdr; // Size of header in paragraphsWORD e_minalloc; // Minimum extra paragraphs neededWORD e_maxalloc; // Maximum extra paragraphs neededWORD e_ss; // Initial (relative) SS valueWORD e_sp; // Initial SP valueWORD e_csum; // ChecksumWORD e_ip; // Initial IP valueWORD e_cs; // Initial (relative) CS valueWORD e_lfarlc; // File address of relocation tableWORD e_ovno; // Overlay numberWORD e_res[4]; // Reserved words注意这里是8字节WORD e_oemid; // OEM identifier (for e_oeminfo)WORD e_oeminfo; // OEM information; e_oemid specificWORD e_res2[10]; // Reserved words注意这里是20字节LONG e_lfanew; // File address of new exe header} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;其中第一个域e_magic成为魔术数字,它用于表示一个MS-DOS兼容的文件类型,所有MS-DOS兼容的可执行文件都将这个值设置为0x5A4D,表示ASCII字符MZ。
小甲鱼python 笔记

小甲鱼python 笔记小甲鱼的Python笔记可以参考以下内容:1. 搭建Python环境(python3):- print("Hello world!") #打印字符串"Hello world!"- 5+3 #进行计算 8- print('well water'+'river') #字符串的拼接- print('I Love You\n' *3) #字符串重复打印,\n为新起一行2. BIF概念(内置函数):- built-in functions(IDLE.shell)- python中用缩进表示代码块,通常是4个空格- 例:if guess == 8: #python中,一个=号是赋值,俩个=号表示左右相等- print('哇塞!你是我肚子里的蛔虫吗?!')- if else 语法 #条件分支- 学会绘画程序流程图(圆角方形、直角方形、菱形)- python中的内置函数 dir(builtins) #查询,全小写的表示BIF- help(input) #查询'input'BIF的功能3. 课后练习:- IDLE是什么?- IDLE是一个Python Shell,利用它可以与Python进行互动。
- print()的作用是什么?- print()会在输出窗口中显示一些文本。
在学习Python的过程中,需要注意Python是一个大小写敏感的语言,以及字符串类型为拼接,int或folat为求和。
在编程过程中,要注意区分“=”和“==”的含义,不可以弄混淆。
请注意,以上内容仅是一份简单的笔记参考,具体的学习内容和方法可能因个人情况和学习进度而有所不同。
在学习过程中,建议结合实际情况,制定适合自己的学习计划,并不断实践和总结,以达到更好的学习效果。
正则表达式小甲鱼

正则表达式⼩甲鱼正则表达式介绍(⼀)正则表达式(Regular expressions 也称为 REs,或 regexes 或 regex patterns)本质上是⼀个微⼩的且⾼度专业化的编程语⾔。
它被嵌⼊到 Python 中,并通过 re 模块提供给程序猿使⽤。
使⽤正则表达式,你需要指定⼀些规则来描述那些你希望匹配的字符串集合。
这些字符串集合可能包含英语句⼦、 e-mail 地址、TeX 命令,或任何你想要的东东。
正则表达式模式被编译成⼀系列的字节码,然后由⼀个 C 语⾔写的匹配引擎所执⾏。
对于⾼级的使⽤,你可能需要更关注匹配引擎是如何执⾏给定的 RE,并通过⼀定的⽅式来编写RE,以便产⽣⼀个可以运⾏得更快的字节码。
本⽂暂不讲解优化的细节,因为这需要你对匹配引擎的内部机制有⼀个很好的理解。
但本⽂的例⼦均是符合标准的正则表达式语法。
⼩甲鱼注释:Python 的正则表达式引擎是⽤ C 语⾔写的,所以效率是极⾼的。
另,所谓的正则表达式,这⾥说的 RE,就是上⽂我们提到的“⼀些规则”。
正则表达式语⾔相对较⼩,并且受到限制,所以不是所有可能的字符串处理任务都可以使⽤正则表达式来完成。
还有⼀些特殊的任务,可以使⽤正则表达式来完成,但是表达式会因此⽽变得⾮常复杂。
在这种情况下,你可能通过⾃⼰编写Python 代码来处理会更好些;尽管 Python 代码⽐⼀个精巧的正则表达式执⾏起来会慢⼀些,但可能会更容易理解。
⼩甲鱼注释:这可能是⼤家常说的“丑话说在前”吧,⼤家别管他,正则表达式⾮常优秀,她可以处理你 98.3% 的⽂本任务,⼀定要好好学哦~~~~~简单的模式我们将从最简单的正则表达式学习开始。
由于正则表达式常⽤于操作字符串的,因此我们从最常见的任务下⼿:字符匹配。
字符匹配⼤多数字母和字符会匹配它们⾃⾝。
举个例⼦,正则表达式 FishC 将完全匹配字符串 "FishC"。
(你可以启⽤不区分⼤⼩写模式,这将使得 FishC 可以匹配 "FISHC" 或 "fishc",我们会在后边讨论这个话题。
小甲鱼-数据结构和算法

小甲鱼-数据结构和算法数据结构和算法1. 简介1.1 数据结构的定义和作用1.2 算法的定义和作用1.3 数据结构和算法的关系2. 数组2.1 数组的概念和特点2.2 数组的基本操作:插入、删除、查找2.3 数组的应用场景和实际问题3. 栈和队列3.1 栈的定义和特点3.2 栈的基本操作:压栈、弹栈、查看栈顶元素 3.3 队列的定义和特点3.4 队列的基本操作:入队、出队、查看队头元素 3.5 栈和队列的应用场景和实际问题4. 链表4.1 链表的定义和特点4.2 链表的基本操作:插入、删除、查找4.3 链表的分类:单向链表、双向链表、循环链表4.4 链表的应用场景和实际问题5. 树5.1 树的定义和特点5.2 树的基本操作:插入、删除、查找5.3 二叉树的定义和特点5.4 二叉树的遍历:前序、中序、后序5.5 树的应用场景和实际问题6. 图6.1 图的定义和特点6.2 图的表示方法:邻接矩阵、邻接表6.3 图的深度优先搜索算法(DFS)6.4 图的广度优先搜索算法(BFS)6.5 图的最短路径算法:Dijkstra、Floyd-Warshall6.6 图的应用场景和实际问题7. 排序算法7.1 冒泡排序7.2 插入排序7.3 选择排序7.4 快速排序7.5 归并排序7.6 堆排序7.7 排序算法的性能比较和选择8. 查找算法8.1 顺序查找8.2 二分查找8.3 哈希表查找8.4 查找算法的性能比较和选择9. 动态规划算法9.1 动态规划的概念和原理9.2 动态规划算法的步骤和解题思路9.3 动态规划的应用场景和实际问题10. 附件:代码示例及练习题法律名词及注释:- 数据结构:是计算机科学中研究数据存储和组织的一门学科。
- 算法:是指解决特定问题求解步骤的描述,在计算机中为一组指令的集合,可以逐步改变解决特定问题的状态。
- 数组:是一种线性数据结构,它由一组连续的内存空间组成,用来存储相同类型的数据。
小甲鱼PE结构工具篇1——记录

PIMAGE_DOS_HEADER pDH=NULL;
判断pDH->e_magic=='MZ';并通过pDH->e_lfanew找到IMAGE_NT_HEADERS STRUCT
IMAGE_NT_HEADERS STRUCT
{
+0h DWORD Signature //
pNtH=(PIMAGE_NT_HEADERS)((DWORD)pDH+pDH->e_Ifanew);
pFH=&pNtH->FileHeader; //(结构中的结构需要先取一层地址 —>优先级大于&)
return pFH;
}
FileOptionalHeader读取
IMAGE_PTIONAL_HEADER GetOptionalFileHeaders(LPVOID ImageBase)
pNtH=(PIMAGE_NT_HEADERS)((DWORD)pDH+pDH->e_Ifanew);
pOH=&pNtH->OptionalFileHeader; //(结构中的结构需要先取一层地址 —>优先级大于&)
return pOH;
}
wsprintf()函数
wsprintf(Buff,"%04lX",pFH->Machine); //04:4位,lX:长16进制
pNtH=(PIMAGE_NT_HEADERS)((DWORD)pDH+pDH->e_Ifanew);
return pNtH;
}
[全套55讲] 鱼C论坛小甲鱼Python课后题
![[全套55讲] 鱼C论坛小甲鱼Python课后题](https://img.taocdn.com/s3/m/85358eda8ad63186bceb19e8b8f67c1cfbd6ee41.png)
[全套55讲] 鱼C论坛小甲鱼Python课后题[全套55讲]鱼c论坛小甲鱼python课后题第1课0.python就是什么类型的语言?python就是脚本语言脚本语言(scriptinglanguage)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序。
以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比c语言、c++语言或java之类的系统编程语言要简单容易。
也使脚本语言Seiches一些属脚本语言的特性:语法和结构通常比较简单自学和采用通常比较简单通常以容易修改程序的“解释”作为运行方式,而不需要“编译”程序的开发产能优于运行性能一个脚本可以使本来必须用键盘展开的相互式操作方式自动化。
一个shell脚本主要由原本须要在命令行输出的命令共同组成,或在一个文本编辑器中,用户可以采用脚本去把一些常用的操作方式组合成一组以太网。
主要用以书写这种脚本的语言叫作脚本语言。
很多脚本语言实际上已经少于直观的用户命令以太网的指令,还可以撰写更繁杂的程序。
1.idle是什么?idle就是一个pythonshell,shell的意思就是“外壳”,基本上来说,就是一个通过键入文本与程序可视化的途径!像是我们windows那个cmd窗口,像是linux那个黑乎乎的命令窗口,他们都就是shell,利用他们,我们就可以给操作系统下发命令。
同样的,我们可以利用idle这个shell与python展开互动。
2.print()的促进作用就是什么?print()会在输出窗口中显示一些文本(在这一讲中,输出窗口就是idleshell窗口)。
3.python中则表示乘法的符号就是什么?python中的乘号就是*(星号)。
5.如果我需要在一个字符串中嵌入一个双引号,正确的做法是?你存有两个挑选:可以利用反斜杠(\\)对双引号换行:\\\,或者用单引号引发这个字符串。
比如:'il\。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PE格式详细讲解2 -系统篇02PE Header 是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,里边包含着许多PE装载器用到的重要字段。
下边小甲鱼将为大家详细讲解哈~首先是IMAGE_NT_HEADERS 结构的定义:(啥?结构不会,先看看小甲鱼童鞋的《零基础入门学习C语言》关于结构方面的章节吧~)IMAGE_NT_HEADERS STRUCT{+0h DWORD Signature+4h IMAGE_FILE_HEADER FileHeader+18h IMAGE_OPTIONAL_HEADER32OptionalHeader} IMAGE_NT_HEADERS ENDSSignature字段:在一个有效的 PE 文件里,Signature 字段被设置为00004550h, ASCII 码字符是“PE00”。
标志这 PE 文件头的开始。
“PE00”字符串是 PE 文件头的开始,DOS 头部的 e_lfanew 字段正是指向这里。
如下图所示:IMAGE_FILE_HEADER 结构IMAGE_FILE_HEADER 结构typedef struct _IMAGE_FILE_HEADER{+04h WORD Machine; // 运行平台+06h WORD NumberOfSections; // 文件的区块数目+08h DWORD TimeDateStamp; // 文件创建日期和时间+0Ch DWORD PointerToSymbolTable; // 指向符号表(主要用于调试)+10h DWORD NumberOfSymbols; // 符号表中符号个数(同上) +14h WORD SizeOfOptionalHeader; //IMAGE_OPTIONAL_HEADER32 结构大小+16h WORD Characteristics; // 文件属性} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;IMAGE_FILE_HEADER结构下边,小甲鱼童鞋为大家详细解释各个成员的含义和用法:(1)Machine:可执行文件的目标CPU类型。
Value MeaningIMAGE_FILE_MACHINE_I386x860x014cIMAGE_FILE_MACHINE_IA64Intel Itanium0×0200IMAGE_FILE_MACHINE_AMD64x640×8664(2)NumberOfSection: 区块的数目。
(注:区块表是紧跟在 IMAGE_NT_HEADERS 后边的)(3)TimeDataStamp: 表明文件是何时被创建的。
这个值是自1970年1月1日以来用格林威治时间(GMT)计算的秒数,这个值是比文件系统(FILESYSTEM)的日期时间更加精确的指示器。
如何将这个值翻译请看:传送门提示:VC的话可以用_ctime 函数或者 gmtime 函数。
(4)PointerToSymbolTable: COFF 符号表的文件偏移位置,现在基本没用了。
(5)NumberOfSymbols: 如果有COFF 符号表,它代表其中的符号数目,COFF符号是一个大小固定的结构,如果想找到COFF 符号表的结束位置,则需要这个变量。
(6)SizeOfOptionalHeader: 紧跟着IMAGE_FILE_HEADER 后边的数据结构(IMAGE_OPTIONAL_HEADER)的大小。
(对于32位PE文件,这个值通常是00E0h;对于64位PE32+文件,这个值是00F0h )。
(7)Characteristics: 文件属性,有选择的通过几个值可以运算得到。
( 这些标志的有效值是定义于 winnt.h 内的 IMAGE_FILE_** 的值,具体含义见下表。
普通的EXE文件这个字段的值一般是 0100h,DLL文件这个字段的值一般是 210Eh。
)小甲鱼温馨提示:多种属性可以通过“或运算”使得同时拥有!The characteristics of the image. This member can be one or more of the following values.(图像的特征。
这个成员可以是下列一个或多个值。
)Value MeaningIMAGE_FILE_RELOCS_STRIPPED 0×0001Relocation information was stripped fromthe file. The file must be loaded at its preferredbase address. If the base address is notavailable, the loader reports an error.搬迁的信息从文件删除。
该文件必须在其preferredbase地址加载。
如果基地址停止,加载程序将报告一个错误。
IMAGE_FILE_EXECUTABLE_IMAGE 0×0002The file is executable (there are no unresolved external references).文件正在被执行IMAGE_FILE_LINE_NUMS_STRIPPED 0×0004COFF line numbers were stripped from the file. COFF行号从文件删除。
IMAGE_FILE_LOCAL_SYMS_STRIPPED 0×0008COFF symbol table entries were stripped from file. COFF符号表表项是从文件中删除。
IMAGE_FILE_AGGRESIVE_WS_TRIM 0×0010Aggressively trim the working set. This value is obsolete as of Windows 2000.积极的修整工作组。
这个值是过时的Windows 2000。
IMAGE_FILE_LARGE_ADDRESS_AWARE 0×0020 The application can handle addresses larger than 2 GB. 应用程序可以处理超过2 GB 的地址IMAGE_FILE_BYTES_REVERSED_LO 0×0080The bytes of the word are reversed. This flag is obsolete.这个字的字节是反向的。
这个标志是过时的。
IMAGE_FILE_32BIT_MACHINE 0×0100 The computer supports 32-bit words. 计算机支持32位的字。
IMAGE_FILE_DEBUG_STRIPPED 0×0200Debugging information was removed and stored separately in another file. 调试信息被分别存储在另一个文件。
IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP0×0400If the image is on removable media, copy it toand runit from the swap file.如果图像是在可移动媒体,复制和运行它从交换文件。
IMAGE_FILE_NET_RUN_FROM_SWAP 0×0800If the image is on the network, copy it to and run it from the swap file.如果图像在网络上,将它复制并运行它从交换文件。
IMAGE_FILE_SYSTEM 0×1000 The image is a system file. 该图像是一个系统文件。
IMAGE_FILE_DLL 0×2000The image is a DLL file. While it is an executable file, it cannot be run directl 该图像是一个DLL 文件。
虽然这是一个可执行文件,它不能直接运行。
IMAGE_FILE_UP_SYSTEM_ONLY 0×4000The file should be run only on a uniprocessor computer. 文件应该只运行在计算机上。
IMAGE_FILE_BYTES_REVERSED_HI 0×8000The bytes of the word are reversed. This flag is obsolete.这个字的字节是反向的。
这个标志是过时的。
PE格式详细讲解3 -系统篇03咱接着往下讲解IMAGE_OPTIONAL_HEADER32 结构定义即各个属性的作用!接着我们来谈谈 IMAGE_OPTIONAL_HEADER 结构,正如名字的意思,这是一个可选映像头,是一个可选的结构。
但是呢,实际上上节课我们讲解的 IMAGE_FILE_HEADER 结构远远不足以来定义 PE 文件的属性。
因此,这些属性在 IMAGE_OPTIONAL_HEADER 结构中进行定义。
因此这两个结构联合起来,才是一个完整的“PE文件结构”。
那么我们接着就应该顺理成章地来谈谈 IMAGE_OPTIONAL_HEADER32 结构的定义:(啥?结构不会,先看看小甲鱼童鞋的《零基础入门学习C语言》关于结构方面的章节吧~)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 SizeOfUninitializedData;// 所有含未初始化数据的节的大小+28h DWORD AddressOfEntryPoint;// 程序执行入口RVA+2Ch DWORD BaseOfCode;// 代码的区块的起始RVA +30h DWORD BaseOfData;// 数据的区块的起始RVA // NT additional fields. 以下是属于NT结构增加的领域:+34h DWORD ImageBase;// 程序的首选装载地址+38h DWORD SectionAlignment;// 内存中的区块的对齐大小+3Ch DWORD FileAlignment;// 文件中的区块的对齐大小+40h WORD MajorOperatingSystemVersion;// 要求操作系统最低版本号的主版本号+42h WORD MinorOperatingSystemVersion;// 要求操作系统最低版本号的副版本号+44h WORD MajorImageVersion;// 可运行于操作系统的主版本号+46h WORD MinorImageVersion;// 可运行于操作系统的次版本号+48h WORD MajorSubsystemVersion;// 要求最低子系统版本的主版本号+4Ah WORD MinorSubsystemVersion;// 要求最低子系统版本的次版本号+4Ch DWORD Win32VersionValue;// 莫须有字段,不被病毒利用的话一般为0+50h DWORD SizeOfImage;// 映像装入内存后的总尺寸+54h DWORD SizeOfHeaders;// 所有头 + 区块表的尺寸大小+58h DWORD CheckSum;// 映像的校检和+5Ch WORD Subsystem;// 可执行文件期望的子系统+5Eh WORD DllCharacteristics;// DllMain()函数何时被调用,默认为 0+60h DWORD SizeOfStackReserve;// 初始化时的栈大小+64h DWORD SizeOfStackCommit;// 初始化时实际提交的栈大小+68h DWORD SizeOfHeapReserve;// 初始化时保留的堆大小+6Ch DWORD SizeOfHeapCommit;// 初始化时实际提交的堆大小+70h DWORD LoaderFlags;// 与调试有关,默认为 0 +74h DWORD NumberOfRvaAndSizes;// 下边数据目录的项数,这个字段自Windows NT 发布以来一直是16+78h IMAGE_DATA_DIRECTORYDataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];// 数据目录表} IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;事实上,这个结构中的大部分字段都不重要,大家可以从注释中理解它们的含义,小甲鱼将比较重要的字段在下边跟大家详细讲解。