DOS笔记

提示:前面加*为特别重要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;重要成员:(DOS头大小为40个字节)  e_magic:DOS签名  MZ(4D5A)  e_lfanew: 指示NT头的偏移(NT:IMAGE_NT_HEADERS)DOS存根:在DOS下,可选项,大小不固定

NT头:
typedef struct _IMAGE_NT_HEADERS {
  DWORD                 Signature;
  IMAGE_FILE_HEADER     FileHeader;
  IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;

重要成员:  Signature 其值为50450000h("PE"00)       fileHeader 文件头        Optionalheader 可选头

NT::文件头:
typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
重要成员:Machine 每个CPU都拥有唯一的Machine码     NumberOfSections 指出节区数量,值一定大于0,且定义的节区数量与实际节区不同时,将发生错误     SizeOfOptionalHeader 用来指出IMAGE_OPTIONAL_HEADER(NT结构体的最后一个参数) 结构体的长度     Characteristics 标识文件属性,文件是否是可运行的形态、是否为DLL等文件信息,以bit OR形式组合起来(常用值:0002h exe 2000h dll)NT::可选头
    
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_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];

// 数据目录表

} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
重要成员:Magic _IMAGE_OPTIONAL_HEADER32时值为10B  _IMAGE_OPTIONAL_HEADER64时为20B     *AddressOfEntryPoint持有EP的RVA。指出程序最先执行的代码起始地址。     *ImageBase 指出程序在内存中优先装载的位置。一般(VB/VC++/Delphi)创建好EXE文件后,其ImageBase的值为00400000,DLL为1000000,PE装载器先创建进程,再将文件载入内存然后把EIP的值设为ImageBase+AddressOfEntryPoint     

     
时间: 2024-10-07 05:29:51

DOS笔记的相关文章

PE笔记之DOS头

IMAGE_DOS_HEADER STRUCT { +0h WORD e_magic    // Magic DOS signature MZ(4Dh 5Ah)     DOS可执行文件标记 +2h   WORD e_cblp    // Bytes on last page of file +4h WORD e_cp    // Pages in file +6h WORD e_crlc    // Relocations +8h WORD e_cparhdr   // Size of hea

dos命令登陆mysql显示“无法在电脑上运行”后续处理笔记

实训课老师用dos登mysql我跟着做结果 - -||这个鬼样子!wtf?我不宠幸他的一两个月里他经历了什么?哦闹脾气了. 然后百度,大部分(我搜到的)都是"系统错误5"然后"拒绝访问",那个是权限问题,具体的可以搜一下改改权限就ok(大概是酱紫),可我不是啊?? 于是我竟然琢磨出另一套通过dos进入mysql的方法(求大神轻喷...(((m -__-)m): 依次这样输入:d:--------->mysql -uroot -p------------->

Java学习笔记1、常用dos命令

cd 改变当前目录 sys      制作DOS系统盘 copy 拷贝文件 del 删除文件 deltree 删除目录树 dir 列文件名 diskcopy 制磁盘 edit 文本编辑 format 格式化磁盘 md 建立子目录 mem 查看内存状况 type 显示文件内容 rd 删除目录 rd /s  删除带子目录.文件的目录 cls 清屏 ren 改变文件名 move 移动文件,改目录名 move [文件名] [目录] 移动文件至新目录下 move [目录名] [目录名] 改目录名

Dos学习笔记(3)attrib命令

今天和昨天一直在摸索这个命令觉得这个命令为什么改变不了文件夹的属性, 因为我试着用attrib +r /s 去修改子文件夹的时候发现没用,然后如果输入 attrib +r /d 又提示说/d需要和/s开关放在一起才有效,于是,我试了下 attrib +r /s/d还是提示无效的开关,我靠,怎么回事,什么情况. 然后百度了下,看了下跟我写的差不多啊,嗯?再看下貌似有个空格啥的, 我改了下attrib +r /s /d我去,这下就好了,总结了下dos命令尽量还是规范些, 前面看到dos不区分字母大小

windows下dos命令的学习笔记

今天看Java视频,顺带学习了一下DOS命令,这也帮助我很好的理解Ubuntu下控制台命令. 1.dir (directory)查看某个盘或文件下的目录(所以文件及文件夹) 2.cd (change directory) 进入某文件目录下(如:cd apple*进入一个文件夹下,名称开头为apple后面可跟任意字符[*为通配符]) cd..     退回到上一级目录 cd\      退回到根目录(即某盘下) (注:想在当前目录下切换到其他盘下,直接在当前目录后写D:(如切换到D盘)) 3.md

java启动dos命令收集笔记二

判断device状态是否可以用 @Test public void devices() throws Exception { Person p = new Person(); List<String> deviceslist = p.excmd("adb devices"); //执行adb devices命令 并且存放的list集合中 List<String> devlist = new ArrayList<String>();  //定义一个个l

【安全牛学习笔记】

弱点扫描 ╋━━━━━━━━━━━━━━━━━━━━╋ ┃发现弱点                                ┃ ┃发现漏洞                                ┃ ┃  基于端口五福扫描结果版本信息(速度慢)┃ ┃  搜索已公开的漏洞数据库(数量大)      ┃ ┃  使用弱点扫描器实现漏洞管理            ┃ ╋━━━━━━━━━━━━━━━━━━━━╋ [email protected]:~# searchsploit Usage:

dos命令-环境变量-数据类型-命名规范

JAVA第一天笔记--dos命令-环境变量-数据类型-命名规范 1.能够阐述JDK和JRE之间区别 JDK(Java Development Kit)是提供给开发人员使用的JAVA开发工具包(javac.exe;java.exe),包含JRE(Java Runtime Environment). JRE(Java Runtime Environment)是Java程序运行环境,包含JVM(Java Virtual Machine)及核心类库. 总结为:开发人员使用JDK开发的程序,在JRE中运行

windows下scrapy框架学习笔记—&#39;scrapy&#39; 不是内部或外部命令

最近几天在深入的学习scrapy框架,但是装完各种需要的基础包之后却发现scrapy命令在别的路径下都用不了,我一开始是把python安装在F:\Python路径下的,安装了scrapy后它默认都会安装在这个路径下,scrapy在路径F:\Python\Scripts路径下,我的scrapy命令只能在此路径下用,因此创建什么工程也都只能在此文件下. 想了一下它的工作原理:它在F:\Python\Scripts路径下,就会在Scripts文件下存在一个scrapy批处理文件,那么在DOS下想要命令