DOS EXE
约 394 个字 预计阅读时间 1 分钟
00000000: 4d5a 5001 0200 0200 2000 0000 ffff 0500 MZP..... .......
| | | | | | | |
| | | | | | | `---[e-f]堆栈段的段值ss(相对值)=该段(stack)段地址-第一个段地址的差
| | | | | | `--------[c-d]至多可以为EXE分配多少字节,几乎都是ffffh
| | | | | `-------------[a-b]至少要为EXE分配多少字节,几乎都是0000h
| | | | `-----------------[8-9]文件头的节长度,一节=10h,文件头的字节长度=节长度*10H;该文件头长度为0020*10h=200h
| | | `----------------------[6-7]重定位项的个数(后续说明)
| | `---------------------------[4-5]小端格式表示当前exe在硬盘中占几个扇区,一个扇区200h=512 bytes, 0002h个扇区
| `---------------------------------[2-3]小端格式表示最后一个扇区的字节数,如果为0,表示最后一个扇区是满的,
| 此时最后一个扇区的字节数是0150h
`-------------------------------------[0-1]标志“MZ”,操作系统在运行exe文件时,会检查这两个字节,判断是否为exe文件---防止死机
00000010: 0001 e80e 2800 0200 1e00 0000 0100 0100 ....(...........
| | | | | | | |
| | | | | | | `---[1Eh-1Fh] 重定位的偏移地址=0001h
| | | | | | `
| | | | | `
| | | | `-----------------[18h-19h] 重定位表的偏移位置001eh(后续说明)
| | | `----------------------[16h-17h] delta CS,代码段的段地址=该段(.text)-第一个段地址的差
| | `---------------------------[14h-15h]IP的值0028h,程序在载入运行时第一条指令地址,病毒必须修改此处
| `---------------------------------[12h-13h] EXE文件头的校验值,在DOS中没什么用,windows里的驱动文件.sys(格式其实上是EXE)中使用
`-------------------------------------[10h-11h] sp寄存器的值(绝对值)0100h
00000020: 0200 0d00 0200 0000 0000 0000 0000 0000 ................
| | |
| | |
| | |
| | |
| | `-------------------------------[24h-25h] Δ=0002h 首段地址+Δ=重定位的段地址
| `------------------------------------[22h-23h]重定位的偏移地址=000Dh
`----------------------------------------[20h-21h]重定位Δ=0002h,首段地址+Δ=重定位的段地址