第3章 Windows运行机理-3.5 PE结构分析(2)
PointerToLinenumbers表示行号表的基于文件的偏移量。一个行号表把源文件行号和一个地址对应起来在该地址上可找到给定行产生的代码。主要用于调试中。NumberOfRelocations表示本节重定向表中重定向的数目PointerTorRelocations域已在前面列出。该域只用于OBJ文件。WORD NumberOfLinenumbers表示本节行号表中行号的数目PointerRoLinenumbers域已在前面列出。Characteristics含标记以指示节属性比如节是否含有可执行代码、初始化数据、未初始数据是否可写、可读等。对所有可能的节属性的列表请见WINNT.H中的IMAGE_SCN_XXX_XXX #defines。下面我们列出了一些常见的节名。1. .text节.text节又叫代码节它是编译器或汇编器产生的所有通用码。在.text节中除了我用编译器创建的和从运行时间库中用到的外还有另外附加的代码时我感到很惊奇。在PE文件中当你调用另一个模块中的函数例如USER32.DLL的GetMessage()时编译器产生的CALL指令并不是把控制直接传给DLL中的该函数。取而代之的是该调用指令把控制传给也是在该.text节中的一个JMP DWORD PTR[XXXXXXXX]指令。该JMP指令跳转到以一个DWORD存于.idata节中的一个地址上。这个.idata节的DWORD含该操作系统函数入口点的真正地址。通过一个位置把所有对一个给定的DLL函数的调用进行归结后装载器就没有必要对每个调用DLL的指令进行拼凑了。PE装载器必须要做的只是把目标函数的正确地址放入.idata节中的该DWORD中就行了。没有任何的CALL指令需要拼凑。这与NE文件有明显的不同后者中每个段含有一个用在该段上的安置表。如果该段调了某个DLL函数20次则装载器必须将该函数的地址拷贝到该段中20次。在PE方法下你不能用一个DLL函数的真正地址来初始化一个变量你会以为如下句子FARPROC pfnGetMessageGetMessage;将会把GetMessage的地址放入变量pfnGetMessage中。在Win16中这确实如此但在Win32中则行不通。在Win32中变量pfnGetMessage结果存的是在.text节中转换了的JMP DWORD PTR[XXXXXXXX]的地址。如果你通过函数指针来调用结果会像你期望的那样出现。然而如果要在GetMessage()的开始处读这些字节则就不那么幸运了除非你自己做一些附加的工作来跟随.idata的“指针”。2. .data节正像.text是代码的默认节一样.data节就是初始化了的数据所在的地方。初始化了的数据由全局变量和静态变量组成他们在编译时被初始化。它还包括字符串文字例如在一个C/C程序中的字符串“HELLO WORLD”。连接器把来自于OBJ和LIB文件的所有.data节组合成EXE中的一个.data节。局部变量是被定位在一个线程栈上的并且在.data或.bss节中不占空间。3. .bss节.bss节是未初始化的静态和全局变量存储的地方。连接器把来自于OBJ和LIB文件的所有.bss节组合成为EXE中的一个.bss节。在节表中为.ss节所用的RawDataOffset域被置为0表示这一节在文件中未占任何空间。TLINK32不产生.bss节代之的是它扩展DATA节的虚拟尺寸以说明未被初始化的数据。4. .CRT节.CRT节是另一个初始化了的数据节它被微软C/C运行时间库因而称为.CRT所使用。该节中的数据被用于这样一些事情如在Main或WinMain被执行之前调用静态C类的构造函数。5. .rsrc节.rsrc节包含了本模块所用的资源。在NT出现后的较早时期16位RC.EXE产生的.RES文件输出格式不能被微软连接器所识别。CVTRES程序把这些.RES文件转换成COFF格式的OBJ并把数据放入OBJ内部的.rsrc节中。连接器然后才能把资源OBJ当做另一个OBJ连接进来。这意味着连接器并不必知道关于资源的任何特殊的东西。微软较新的连接器似乎能够直接处理.RES文件。6. .idata节.idata节包含模块从其他DLL引入的函数和数据的信息。该节等价于NE文件的一个模块访问表。不同的关键点在于PE文件引入的每个函数特别地要在这一节列出。要在一个NE文件中找等价的信息你不得不深入到每段所用的生数据尾端处的重定位。7. .edata节.edata是被其他模块使用的PE文件引出的函数和数据的一个列表。NE文件与此等价的是项表、驻留名字表和非驻留名字表这三个表的结合。不像在Win16中那样几乎没有理由从一个EXE文件中输出任何东西因此通常只能在DLL文件中看到.edata节。例外的是Borland C产生的EXE文件它似乎总是引出一个函数_ _GetExceptDLLinfo该函数为运行时间库内部使用。当使用微软工具时.edata节中的数据通过.EXP文件到PE文件中。另一方面连接器本身不产生这些信息而是依靠库管理器LIB32来扫描OBJ文件并创建.EXP文件然后连接器把该.EXP文件加到模块列表中以便连接。那些麻烦的.EXP文件确实正是具有一个不同扩展名的OBJ文件。通过用/S显示符号表选项来运行PEDUMP程序可以看到从一个.EXP中引出的函数。

相关新闻

Node 快捷方式路径怎么获取

Node 快捷方式路径怎么获取

Node 快捷方式路径(也就是 nvm 创建的 Node 软链接路径)该如何获取,这个路径是 nvm 管理 Node 版本的核心,我经历了两种简单的方法方法 1:通过 nvm 命令直接查看(最准确)打开管理员身份的命令提…

2026/7/5 18:18:44 阅读更多 →
MyBatis-Plus 批量操作 SQL 日志不打印问题解决方案

MyBatis-Plus 批量操作 SQL 日志不打印问题解决方案

书接上文:SqlLogInterceptor mybatis配置打印SQL 问题描述 在使用 MyBatis-Plus 的 saveBatch() 和 updateBatchById() 方法进行批量数据操作时,发现自定义的 Druid SQL 日志拦截器(SqlLogInterceptor)无法打印这些批量操作的 S…

2026/7/7 12:09:16 阅读更多 →
【开题答辩全过程】以 高校学生社团管理系统为例,包含答辩的问题和答案

【开题答辩全过程】以 高校学生社团管理系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

2026/7/6 1:24:15 阅读更多 →

最新新闻

基于ComfyUI的AI漫剧制作:8G显存下的零人工干预方案

基于ComfyUI的AI漫剧制作:8G显存下的零人工干预方案

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 最近在B站刷到不少AI生成的漫画剧视频,从角色设计到分镜再到视频合成,全程自动化,效果相当惊艳。但…

2026/7/7 12:09:27 阅读更多 →
上行与下行带宽区别

上行与下行带宽区别

很多朋友在测速时,都会看到两个数字:下载速度和上传速度。有时候,下载速度可以达到900Mbps,而上传速度却只有100Mbps左右;还有些企业申请专线时,运营商会特别说明“上下行对等带宽”。不少人虽然每天都在用…

2026/7/7 12:07:17 阅读更多 →
高压隔离技术:ISOM8710与STM32L4A6RG的安全设计实践

高压隔离技术:ISOM8710与STM32L4A6RG的安全设计实践

1. 高压安全隔离技术概述在工业自动化、医疗设备和电力电子等领域,高压电路与低压控制系统的安全隔离是确保人员和设备安全的关键需求。ISOM8710作为一款高性能数字隔离器,配合STM32L4A6RG低功耗微控制器,能够构建可靠的高压隔离解决方案。典…

2026/7/7 12:07:17 阅读更多 →
听歌不想只发截图?用MusicCard把喜欢的歌做成专属音乐海报

听歌不想只发截图?用MusicCard把喜欢的歌做成专属音乐海报

文章目录1.在极空间一键部署Music Card1.1ssh远程连接到极空间1.2安装docker1.3安装Music Card2.安装cpolar实现随时随地开发3.配置公网地址4.保留固定公网地址总结有些歌适合单曲循环,也适合被认真分享。只是很多时候,我们想表达的不只是“我在听这首歌…

2026/7/7 12:03:16 阅读更多 →
网盘直链下载助手完整指南:告别限速,一键获取真实下载链接

网盘直链下载助手完整指南:告别限速,一键获取真实下载链接

网盘直链下载助手完整指南:告别限速,一键获取真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国…

2026/7/7 11:57:12 阅读更多 →
如何免费解锁WeMod专业版:3个关键步骤与安全指南

如何免费解锁WeMod专业版:3个关键步骤与安全指南

如何免费解锁WeMod专业版:3个关键步骤与安全指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费而烦恼吗&am…

2026/7/7 11:55:12 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻