




已阅读5页,还剩98页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,计算机病毒 Computer Virus,傅建明 Fujms,武汉大学计算机学院,2,第二章 预备知识,主要内容:病毒的基本结构,磁盘结构,文件系统,文件格式 讲授:原理介绍与工具演示结合 基础和重点,3,第二章 预备知识,2.1 计算机病毒的结构 2.2 计算机磁盘的管理 2.3 Windows文件系统 2.4 计算机的引导过程 2.5 中断与异常 2.6 内存管理 2.7 EXE文件格式,4,计算机病毒的结构,ECHO OFF IF %DRIVE%=A: GOTO END123 IF %DRIVE%=C: GOTO END123 IF %COMSPEC%= =C:WINDOWSCOMMAND.COM SET DRIVE=A: IF %COMSPEC%= =A:COMMAND.COM SET DRIVE=C: IF NOT EXIST %DRIVE%AUTOEXEC.BAT GOTO END123 COPY VIRUS.BAT %DRIVE%NUL ECHO CALL VIRUSTMP.DAT COPY %DRIVE%AUTOEXEC.BAT+TMP.DAT %DRIVE%AUTOEXEC.BAT NUL DEL TMP.DATNUL Echo BAT Virus Test! I will format your Disk! : END123 ECHO ON,5,计算机病毒的结构,触发机制: 这部分主要用来控制病毒的传播和发作。 传播机制: 这部分主要负责病毒的感染和传播。 表现机制: 这个模块也称为破坏模块。,6,1 磁盘结构,硬盘基本结构,盘面基本结构,7,计算机磁盘的管理,硬盘的三个基本参数-CHS :磁头数(Heads)、柱面数(Cylinders)、扇区数(Sectors)、以及相应的寻址方式。 磁头数(Heads): 8bit;0-255 柱面数(Cylinders): 10bit,0-1023 扇区数(Sectors): 6bit,0-63 一个硬盘实际最大容量为: 255 * 1023 * 63 * 512/1048576 = 8024 MB,8,计算机磁盘的管理,NORMAL, 普 通 模 式: 这 是 原 来 的IDE 硬 盘 工 作 模 式, 支 持 的 最 大 柱 面 数 为1024, 最 大 磁 头 数 为16, 每 磁 道 最 大 扇 区 数 为63, 该 模 式 可 管 理 的 最 大 硬 盘 容 量 为: 1024 16 63 512 =504MB,9,计算机磁盘的管理,LBA(Logical Block Addressing), 逻 辑 块 地 址 模 式: 在 该 模 式 下 设 置 的 柱 面 数、 磁 头 数 和 每 磁 道 扇 区 数 并 不 是 实 际 的 物 理 参 数, 在 访 问 硬 盘 时, 由EIDE 控 制 器 把 由 柱 面 数、 磁 头 数 和 每 磁 道 扇 区 数 等 参 数 确 定 的 逻 辑 地 址 转 换 为 实 际 的 物 理 地 址。 支 持 的 最 大 磁 头 数 为255, 其 他 参 数 与 普 通 模 式 相 同。 因 此, 该 模 式 可 管 理 的 最 大 硬 盘 容 量 为: 1024 255 63 512= 8024 MB,10,计算机磁盘的管理,LBA=(cylinder * heads_per_cylinder + heads)* sectors_per_track + (sector-1) C=LBA DIV (PH*PS) H=(LBA DIV PS) mod PH S=LBA mod PS,11,计算机磁盘的管理,ATA-1: C-16bit,H-8bit, S-4bit(28bit) MAX=6553625516512/1024 KB=127.5 GB Int 13: C-10bit, H-8bit, C-6bit(24bit) EX Int 13: 64bit线性地址 BigDrives:CHS每个参数为16bit=48bit 64T 支持大硬盘:芯片组,主板BIOS,操作系统。,12,计算机磁盘的管理,LARGE, 大 模 式: 当 硬 盘 的 柱 面 数 超 过1024 而 又 不 为LBA 所 支 持 时, 可 采 用 该 模 式。LARGE 模 式 参 数 设 置 方 法 是 把 柱 面 数 除 以2, 把 磁 头 数 乘 以2, 使 柱 面 减 少 容 量 不 变。 例 如, 硬 盘 物 理 柱 面 数 为1460, 磁 头 数 为16, 进 入LARGE 模 式 则 变 为 柱 面 数730, 磁 头 数32, 这 样 在 一 些 软 件 看 来 柱 面 数 小 于 了1024。 该 模 式 可 管 理 的 硬 盘 最 大 容 量 为: - 1024 32 63 512=1GB,13,计算机磁盘的管理,主引导扇区(Boot Sector)也就是硬盘的第一个扇区(0面0磁道1扇区),它由主引导记录(Main Boot Record,MBR),硬盘主分区表(Disk Partition Table,DPT)和引导扇区标记(Boot Record ID)三部分组成。该扇区在硬盘进行分区时产生,用FDISK/MBR可重建标准的主引导记录程序。,14,计算机磁盘的管理,000H 08AH :主引导程序,用于寻找活动分区 08BH 0D9H :启动字符串 0DAH 1BCH :保留 1BEH 1FDH :硬盘主分区表 1FEH 1FFH :结束标记(55AA),15,生物病毒,16,计算机磁盘的管理,17,第一个主分区:绝对地址(LBA)=0000003f=63 总扇区数=00FA08BD=16386237 第二个主分区:绝对地址(LBA)=00FA08fc=16386300 总扇区数=0856dbc5=139910085,18,计算机磁盘的管理,第一个虚拟MBR,start sector=16386300,其内容如上: 分区项1第一个逻辑D, 相对地址(LBA)=0000003f=63, 总扇区数=01de7f61=31358817 分区项2相对地址(LBA)=01de7fa0=31358880, 总扇区数=01d4f039=30732345 (用PQ时为30732282,减去了虚拟MBR的63个扇区),19,计算机磁盘的管理,第二虚拟MBR的位置为=16386300+31358880=47745180,20,21,22,计算机磁盘的管理,硬盘的逻辑分区排列如下: MBR(63)+DBR(32)+FAT1+FAT2+DATA DBR=DOS引导程序+BPB(BIOS Parameter Block),23,系统启动过程简介,1. 开机 2. BIOS加电自检(Power On Self Test,即POST),此时电源稳定后,CPU从内存地址0ffff:0000处开始执行。 3. 将硬盘第一个扇区(0头0道1扇区,也就是Boot Sector)读入内存地址0000:7c00 处。 4. 检查 (WORD)0000:7dfe是否等于0xaa55,若不等于则转去尝试其它启动介质,如果没有其它启动介质则显示“No ROM BASIC”,然后死机。 5. 跳转到0000:7c00 处执行MBR中的程序。 6. MBR首先将自己复制到0000:0600 处,然后继续执行。 7. 在主分区表中搜索标志为活动的分区。如果发现没有活动分区或有不止一个活动分区,则显示“Invalid partition table”并挂起系统。 8. 将活动分区的第一个扇区读入内存地址0000:7c00处。 9. 检查(WORD)0000:7dfe是否等于0xaa55,若不等于则显示“Missing Operating System”然后停止,或尝试软盘启动。 10. 跳转到0000:7c00处继续执行特定系统的启动程序。,24,扩展Int13H,1数据类型约定 BYTE 1 字节整型 (8位) WORD 2 字节整型 (16位) DWORD 4 字节整型 (32位) QWORD 8 字节整型 (64位),25,扩展Int13H,磁盘地址数据包Disk Address Packet (DAP) DAP是基于绝对扇区地址的,因此利用DAP,Int13H可以轻松地逾越1024柱面的限制,因为它根本就不需要CHS的概念。 DAP的结构如下: STRUCT DiskAddressPacket BYTE PacketSize; / 数据包尺寸(=16字节) BYTE Reserved; / =0 WORD BlockCount; / 要传输的数据块个数(以扇区为单位) DWORD BufferAddr; / 传输缓冲地址(segment:offset) QWORD BlockNum; / 磁盘起始绝对块地址 ;,26,扩展Int13H,ds:di = 磁盘地址数据包(disk address packet) dl = 驱动器号 ah = 功能代码/返回码 检查扩展Int 13H是否存在(41h), 扩展读(42h), 扩展写(43h), 校验扇区(44h), 扩展定位(47h), 取得驱动器参数(48h),27,Windows文件系统,对文件的读写,屏蔽底层操作。 主引导记录 (Master Boot Record,MBR)、 磁盘分配表(Partition Table,DPT)、 引导记录(Boot Record,DBR)、 文件分配表(File Allocation Table,FAT) 根目录(Root Directory) 簇:若干扇区合并为一个簇,其数目必须是2的幂方。微软把这些簇称为分配单元(Allocation Unit),28,29,FAT,FAT12,FAT16,FAT32,NTFS,HPFS,VFS FAT中的一个点表示该簇的状态,是空闲,还是占用。如果该点用12bit表示为FAT12,用32bit表示为FAT32。则最大簇空间: FAT12的最大空间为=2*12=4K FAT16的最大空间为=2*16=64K FAT32的最大空间为=2*32=4G,30,FAT32,DBR+FAT1+FAT2+DATA 没有采用固定的FDT,根目录起始扇区由BDR指定。 FDT:每项32字节,一簇为4k,则最多的目录项=8*512/32=128个,31,FAT32,(1) 0- 7字节 文件正名。 (2) 8-10字节 文件扩展名。 (3) 11字节 文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。 (4) 11-13字节 仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。 (5) 13-15字节 24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。 (6) 16-17字节 16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。 (7) 18-19字节 16位二进制的文件最新访问日期,定义同(6)。 (8) 20-21字节 起始簇号的高16位。 (9) 22-23字节 16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。 (10)24-25字节 16位二进制的文件最新修改日期,定义同(6)。 (11)26-27字节 起始簇号的低16位。 (12)28-31字节 32位的文件字节长度。,32,FAT32,其中第(4)至(8)项为以后陆续定义的。 对于子目录项,其(12)为零;已删除目录项的首字节值为E5H。在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,26-27字节为零。,33,34,簇号为3的数据=目录区,35,长文件名-SECURITY-ZHANG.LOG,每一项最多保存13个字符内码: 首字节为长文件名的第几项,0B=0F,0C指名类型,0D为校验码,1A-1B为0。32-6=26=13*2 起始簇=1573903,36,SECURITY-ZHANG.LOG的簇链,起始簇=1573903-189160|x-189161|x-189162|x-189163|x- 189164,37,计算机的引导过程,1.电源就开始向主板和其它设备供电 , CPU马上从地址FFFF0H处开始执行指令,该指令是一条跳转指令,该指令跳到系统BIOS中真正的启动代码处。 2.系统BIOS的启动代码首先要做的事情就是进行POST(Power On Self Test,加电自检),POST的主要任务是检测系统中的一些关键设备(如内存和显卡等)是否存在和能否正常工作。,38,计算机的引导过程,3.系统BIOS将查找显示卡的BIOS,查找完所有其它设备的BIOS,系统BIOS将检测CPU的类型和工作频率,测试主机所有的内存容量 4.系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CDROM、软驱、串行接口和并行接口等连接的设备 5.系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备. 6.系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与操作系统交换硬件配置信息的数据,39,计算机的引导过程,7.系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是DOS和Windows 9x最基本的系统文件。,40,41,中断与异常,42,中断与异常,80386把外部中断称为“中断” ,把内部中断称为“异常” 通常在两条指令之间响应中断或异常。80386最多处理256种中断或异常。 对80386而言,中断是由异步的外部事件引起的,中断用于指示I/O设备的一次操作已完成。,43,中断与异常,80386有两根引脚INTR和NMI接受外部(硬件)中断请求信号。INTR接受可屏蔽中断请求。NMI接受不可屏蔽中断请求。 在80386中,不可屏蔽中断所对应的中断向量号固定为2。 异常是80386在执行指令期间检测到不正常的或非法的条件所引起的。如执行除法指令时,除数等于0;执行指令时发现特权级不正确。当发生这些情况时,指令就不能成功完成。软中断指令“INT n”和“INTO”也归类于异常。,44,中断与异常,故障是在引起异常的指令之前,把异常情况通知给系统的一种异常。80386认为故障是可排除的。当控制转移到故障处理程序时,所保存的断点CS及EIP的值指向引起故障的指令。 陷阱是在引起异常的指令之后,把异常情况通知给系统的一种异常。当控制转移到异常处理程序时,所保存的断点CS及EIP的值指向引起陷阱的指令的下一条要执行的指令。 中止是在系统出现严重情况时,通知系统的一种异常。引起中止的指令是无法确定的。产生中止时,正执行的程序不能被恢复执行。,45,中断优先权,中断优先权由高到低的顺序是 1. 调试故障。 2. 其它故障。 3. 除法错,INTO(溢出中断),INT n(软件中断)。 4. NMI(不可屏蔽中断)。 5. INTR(可屏蔽中断)。 6. 单步中断。,46,中断向量表,该表用来存放各种中断程序的入口地址,每一中断向量的入口地址占有4个字节,高两字节存放中断向量的段地址,低两字节存放中断向量的偏移地址。整个中断向量表中可以存放256个中断向量地址,编号从00到255 。,47,中断向量表,48,中断处理过程,1 把状态标志进栈保护。 2 0IF(清除标志IF,禁止跟踪),0一TF(清除标志TF,禁止中断)。 3 根据中断类型号计算中断向量入口地址在向量表中的位移,计算的方法是: 位移中断类型号4 4 保护断点,把当前代码段寄存器的内容进栈保护,将中断向量的段地址送CS;把当前指令指针入栈保护,将中断向量的偏移地址送IP;于是,程序就转到了中断服务程序。 进入中断服务程序之后,一般要保护现场(寄存器压栈),然后进行中断服务,在中断返回前要恢复现场(寄存器弹栈),最后用STI开中断,并用IRET恢复断点处的标志寄存器、CS和IP的值。,49,DOS内存管理,50,DOS内存管理,DOS在基本内存(640K)运行时的内存分配状态。在计算机通常的工作方式(实方式)下,总体上来说,DOS可以管理的内存空间为lMB(=2*20)。此1MB空间可分为两大部分,一部分是RAM区,另一部分则是ROM区。而RAM区又分为系统程序、数据区和用户程序区两部分。,51,Window 9x/NT内存布局,Win32的平坦内存模式使每个进程有4GB的内存空间,程序的代码和数据都放在同一地址空间中,即不必区分代码段和数据段。程序员当然也不需要了解段寄存器CS、DS、ES的具体内容。,52,53,54,操纵内存,Win32的内存API可以分为三类:虚拟内存管理、堆管理、内存映射文件管理。 1)虚拟内存管理则较适应于程序要使用大块内存的情况。 2)堆管理适应于程序要经常分配小块内存的情况 3)内存映射文件则为大文件的操作提供方面,并提供进程间通讯的方法,55,虚拟内存,1) 分配/保留虚拟内存 VirtualAlloc(lpMem,Size,Type,Access) 2) 释放虚拟内存 VirtualFree(lpMEM,Size,Type) 3) 改变页保护属性 VirtualProtect(lpMem,size,Acess,lpOldAcess) 4) 内存锁定:VirtualLock(lpMem,Size) 5) 内存解锁:VirtualUnlock(lpMem,Size),56,堆管理,1) 使用缺省堆 Win32进程都有一个缺省堆。其默认大小为1MB,可以在编译时改变这个缺省值。 GetProcessHeap函数 2) 创建新堆 HeapCreate(flOption,dWINitalSize,cbMaximumSize) 3) 分配堆内存 HeapAlloc(hHeap,dwFlags,dwBytes) 4) 重分配堆内存 HeapReAlloc(hHeap,dwFlags,LpMem,dwBytes) 5) 释放堆内存 HeapFree(hHeap,dwFlags,lpMem),57,EXE-MZ,偏移 大小(字节) 描述 00 2 EXE 文件类型标记:4d5ah/MZ 02 2 文件的最后一个扇区的字节数 04 2 文件的总扇区数 文件大小=(总扇区数-1)*512+最后一个扇区的字节数 06 2 重定位项的个数 08 2 EXE文件头的大小(16 bytes*this value) 0a 2 最小分配数(16 bytes*this value) 0c 2 最大分配数(16 bytes*this value) 0e 2 堆栈初始段址(SS) 10 2 堆栈初始指针(SP) 12 2 补码校验和 14 2 初始代码段指针(IP) 16 2 初始代码段段址(CS) 18 2 定位表的偏移地址 1a 2 覆盖号The overlay number make by link,58,59,MZ文件加载,首先,它计算程序映像文件的大小加上PSP的大小再加上EXEHEADER结构中的exMinAlloc域说明的内存大小之和,如果总和超过最大可用内存块的大小,则MS-DOS停止加载程序并返回一个出错码。否则,它计算程序映像的大小加上PSP的大小再加上EXEHEADER结构中的exMaxAlloc域说明的大小之和,如果第二个总和小于最大可用内存块的大小,则MS-DOS分配计算得到的内存量。否则,它分配最大可用内存块。分配完内存后,MS-DOS确定起始段地址,MS-DOS从此处加载程序映像。,60,61,NE文件格式,NE 是New Excutable的缩写,它是16位Windows可执行文件的标准格式,这种格式基本上已经没有用了,这里仅供参考。,62,PE格式,PE文件格式被组织为一个线性的数据流,使用平面地址空间,所有代码和数据都合并在一起,组成一个很大的结构。文件内容被分割为不同的区块(section, 区段/节),块中包含代码或数据,各个块按页的边界对齐,块没有大小限制,是一个连续结构。每个块都有自己在内存中的一套属性,如是否含代码、只读、读写。,63,This program cannot be run in DOS mode.,Section headers,sections,64,PE的名词,1、入口点(entry point),程序执行的第一行代码 2、文件偏移地址(File offset) Pe文件存储在磁盘上,各数据段的地址称为文件偏移地址或物理地址(raw offset)。文件偏移地址从PE文件的第一个字节开始计数,起始值为0。 3、虚拟地址(Virtual Address, VA) 386保护模式下,程序访问存储器所使用的逻辑地址称为虚拟地址(VA),也称内存偏移地址(memory offset)。 4、基地址(Image base) 文件执行时将被映射到指定的内存地址,这个初始内存地址称为基地址,该值由pe文件本身决定。默认,EXE:0x00400000, DLL:0x1000000。用链接程序的/BASE选项改变该值。,65,PE的名词,5、相对虚拟地址(Relative Virtual Address,RVA) 是指内存中相对于pe文件装入地址(基地址)的偏移量。 RVA=VA - imagebase 6、文件偏移地址与虚拟地址转换 文件区块的对齐有两种:一种是磁盘文件中的对齐,另一种是内存中的对齐。区块是按页对齐的,区块总是至少以一个页边界为开始。即每一个区块的第一个字节对应于某个页的开始。在x86系统中,内存页的大小为4k,即0x1000,区块以4k的倍数对齐。磁盘对齐值一般为0x200, 区块以512的倍数对齐. 当区块的大小不是页的整数倍时,其不足部分用0x00填充。如果两种对齐值相同,加快加载。,66,文件偏移地址与虚拟地址,67,68,MS-DOS MZ header,MS-DOS头部占据了PE文件的头64个字节.4*16=64. USHORT e_magic; / 魔术数字=MZ LONG e_lfanew; /e_lfanew成员用于定位PE头。从注释中理解,e_lfanew是File pointer,非RVA.,69,typedef struct _IMAGE_DOS_HEADER / DOS的.EXE头部 USHORT e_magic; / 魔术数字 USHORT e_cblp; / 文件最后页的字节数 USHORT e_cp; / 文件页数 USHORT e_crlc; / 重定义元素个数 USHORT e_cparhdr; / 头部尺寸,以段落为单位 USHORT e_minalloc; / 所需的最小附加段 USHORT e_maxalloc; / 所需的最大附加段 USHORT e_ss; / 初始的SS值(相对偏移量) USHORT e_sp; / 初始的SP值 USHORT e_csum; / 校验和 USHORT e_ip; / 初始的IP值 USHORT e_cs; / 初始的CS值(相对偏移量) USHORT e_lfarlc; / 重分配表文件地址 USHORT e_ovno; / 覆盖号 USHORT e_res4; / 保留字 USHORT e_oemid; / OEM标识符(相对e_oeminfo) USHORT e_oeminfo; / OEM信息 USHORT e_res210; / 保留字 LONG e_lfanew; / 新exe头部的文件地址 IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;,70,71,NT映像头,NT映像头的结构定义如下: IMAGE_NT_HEADERS STRUCT Signature dd ? /PE FileHeader IMAGE_FILE_HEADER OptionalHeader IMAGE_OPTIONAL_HEADER32 IMAGE_NT_HEADERS ENDS,72,IMAGE FILE HEADER,typedef struct _IMAGE_FILE_HEADER USHORT Machine; USHORT NumberOfSections; ULONG TimeDateStamp; ULONG PointerToSymbolTable; ULONG NumberOfSymbols; USHORT SizeOfOptionalHeader; USHORT Characteristics; IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; #define IMAGE_SIZEOF_FILE_HEADER 20,73,74,文件属性:,Bit 0 (IMAGE_FILE_RELOCS_STRIPPED):置1表示文件中没有重定向信息。 Bit 1 (IMAGE_FILE_EXECUTABLE_IMAGE):置1表示该文件是可执行文件 Bit 2 (IMAGE_FILE_LINE_NUMS_STRIPPED):置1表示没有行数信息; Bit 3 (IMAGE_FILE_LOCAL_SYMS_STRIPPED):置1表示没有局部符号信息; Bit 4 (IMAGE_FILE_AGGRESIVE_WS_TRIM): Bit 7 (IMAGE_FILE_BYTES_REVERSED_LO) Bit 15 (IMAGE_FILE_BYTES_REVERSED_HI): Bit 8 (IMAGE_FILE_32BIT_MACHINE):表示希望机器为32位机。=1 Bit 9 (IMAGE_FILE_DEBUG_STRIPPED):表示没有调试信息 Bit 10 (IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP):置1表示该程序不能运行于可移动介质中(如软驱或CD-ROM)。 Bit 11 (IMAGE_FILE_NET_RUN_FROM_SWAP):置1表示程序不能在网上运行。在这种情况下,OS必须把文件拷贝到交换文件中执行。 Bit 12 (IMAGE_FILE_SYSTEM):置1表示文件是一个系统文件例如驱动程序。在可执行文件中没有使用。 Bit 13 (IMAGE_FILE_DLL):置1表示文件是一个动态链接库(DLL)。 Bit 14 (IMAGE_FILE_UP_SYSTEM_ONLY):表示文件被设计成不能运行于多处理器系统中。,75,可选映像头,顺序 偏移 名字 大小(字节) 描述 1 (00H) Magic 2 幻数,一般是010BH 2 (02H) MajorLinkerVersion 1 连接程序的主版本号 3 (03H) MinorLinkerVersion 1 连接程序的次版本号 4 (04H) SizeOfCode 4 代码段的总尺寸 5 (08H) SizeOfInitializedData 4 已初始化的数据总尺寸 6 (0CH) SizeOfUninitalizedData 4 未初始化的数据总尺寸 7 (10H) AddressOfEntryPoint 4 开始执行位置 8 (14H) BaseOfCode 4 代码节开始的位置 9 (18H) BaseOfData 4 数据节开始的位置 10 (1CH) ImageBase 4 可执行文件的默认装入的内存地址 11 (20H) SectionAlignment 4 可执行文件装入内存时节的对齐数字 12 (24H) FileAlignment 4 文件中节的对齐数字,一般是一个扇区长(512字节) 13 (28H) MajorOperationSystemVersion 2 要求最低操作系统版本好的主版本号 14 (2aH) MinorOperationSystemVersion 2 要求最低操作系统版本好的次版本号 15 (2CH) MajorImageVersion 2 可执行文件主版本号 16 (2EH) MajorImageVersion 2 可执行文件次版本号,76,20 (38H) SizeOfImage 4 装入内存后映像的总尺寸 21 (3CH) SizeOfHeaders 4 NT映像头+节表的大小 22 (40H) CheckSum 4 检验和 23 (44H) Subsystem 2 可执行文件的子系统。如GUI子系统 24 (46H) DllCharacteristics 2 何时DllMain被调用,一般为0 25 (48H) SizeOfStackReserve 4 初始化线程时保留的堆栈大小 26 (4CH) SizeOfStackCommit 4 初始化线程时提交的堆栈大小 27 (50H) SizeOfHeapReserve 4 进程初始化时保留的堆大小 28 (54H) SizeOfHeapCommit 4 进程初始化时提交的堆大小 29 (58H) LoaderFlags 4 此项与调试有关 30 (5CH) NumberRvaAndSize 4 数据目录的项数,一般是16 31 (60H) DataDirectory 128 数据目录,77,78,79,节表,节包含了文件的内容,包括代码、数据、资源以及其它可执行信息,每个段都有一个头部和一个实体(原始数据)。,80,#define IMAGE_SIZEOF_SHORT_NAME 8 typedef struct _IMAGE_SECTION_HEADER UCHAR NameIMAGE_SIZEOF_SHORT_NAME; union ULONG PhysicalAddress;/在EXE中,它保存的实际尺寸 ULONG VirtualSize; Misc; ULONG VirtualAddress; /本节的相对虚拟地址 ULONG SizeOfRawData; /本节的经过文件对齐后的尺寸 ULONG PointerToRawData; ULONG PointerToRelocations; ULONG PointerToLinenumbers; USHORT NumberOfRelocations; USHORT NumberOfLinenumbers; ULONG Characteristics; /节属性 IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;,81,Characteristics-节属性,0x00000020? 这个块包含代码。置位 0x00000040? 这个块包含已初始化的数据。 0x00000080? 这个块包含未初始化的数据(如 .bss 块) 0x00000200? 这个块包含注释或其它的信息。编译器产生的 .drectve 块。 0x00000800? 这个块的内容不应放进最终的EXE文件中。 0x02000000? 这个块可以被丢弃,因为一旦它被载入,其进程就不需要它。最通常的可丢弃块是基本重定位块( .reloc )。 0x10000000? 这个块是可共享的。和DLL一起使用时,这个块的数据可以在使用这个DLL的进程之间共享。在连接时用SHAR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深入了解消费者心理的商务英语试题及答案
- 造口伤口试题及答案
- 人人车合同范例
- 农业灌溉工程合同范例
- emc能源合同范例
- 儿童托管加盟合同范例
- 中铁青工合同范例
- 出纳入职合同范例
- 加装电梯签订合同范例
- 出租车分期合同范例
- 新生儿死亡病例汇报课件
- 2024年湖北省科技投资集团有限公司招聘笔试参考题库含答案解析
- 五大策略成就燕赵零售王-记石家庄北国超市
- 电机学智慧树知到课后章节答案2023年下广东工业大学
- 乳腺病理学-课件
- 农民工法律维权知识讲座
- 吸氧护理幻灯片课件
- 《流感嗜血杆菌》课件
- (人教)部编版五年级下册语文《颜楷书法》教学课件
- 中央分隔带填土规范
- 港口散装液体危险化学品港口经营人的装卸管理人员从业资格考试
评论
0/150
提交评论