首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

PE文件解析器的编写(二)——PE文件头的解析

之前在学习PE文件格式的时候,是通过自己查看各个结构,自己一步步计算各个成员在结构中的偏移,然后在计算出其在文件中的偏移,从而找到各个结构的值,但是在使用C语言编写这个工具的时候,就比这个方便的多,只要将对应的指针类型转化为各个结构类型...这次主要说明的是PE文件头的解析,也就是之前看到的第一个界面中显示的内容,这个部分涉及到CPeFileInfo这个解析类的部分代码,以及CPeFileInfoDlg这个对话框类的代码。...选择目标文件 首先通过点击open按钮来弹出一个对话框,让用户选择需要解析文件。...在程序中有一个判断该文件是否是PE文件的操作。...PE文件

1.3K20

十六.PE文件逆向基础知识(PE解析PE编辑工具和PE修改)

基础性文章,希望对您有所帮助,作者目的是与安全人共同进步,加油~ 文章目录: 一.PE文件基础 二.PE文件格式解析 1.010Editor解析PE文件 2.Ollydbg动态调试程序 3.仅弹出第二个窗口...代码植入 控制权获取 图标更改 Hook … PE文件解析常用工具包括: PEView:可按照PE文件格式对目标文件的各字段进行详细解析。...(2个字节):0003 偏移10H处,字段Size of Optional Header 给出可选映象头的大小(2个字节):00E0 可选映象头Optional Header:0c8H~1a7H 对应解析如下图所示...PE文件解析工具,通过PEview软件可以分析PE文件的详细格式。...内容包括: PE文件基础 PE文件格式解析 – 010Editor解析PE文件 – Ollydbg动态调试程序 – 仅弹出第二个窗口 熟悉并分析PE文件的引出表 – PEView和Stud_PE查看文件

6.2K52
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深度解析C语言文件操作

    2.1 程序文件 包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。...文件名包括3个部分:文件路径+文件名主干+文件后缀 例如:c:\code\test.txt 为了方便,文件的标识通常被称为文件名. 3.文件的打开和关闭 缓冲文件系统中,关键的概念是"文件类型指针"...; int _file; int _charbuf; int _bufsiz; char* _tmpfname; }; typedef struct _iobuf FILE; 不同C语言编译器的...%d %f",&s.c,&s.i,&s.f); fprintf(pf, "%c %d %f", s.c, s.i, s.f); fclose(pf); pf = NULL; return 0;...,也会刷新缓冲区 pf = NULL; return 0; } 由此我们可以得出一个结论: 因为有缓冲区的存在,C语言再操作文件的时候,需要做刷新缓冲区或者在文件操作结束的时候关闭文件

    10810

    2.2 PE结构:文件头详细解析

    2.2 DOS文件头详细解析 DOS头是PE文件开头的一个固定长度的结构体,这个结构体的大小为64字节(0x40)。...,在C语言文件winnt.h中有对这个DOS结构详细定义,如下所示: typedef struct _IMAGE_DOS_HEADER { WORD e_magic;...则指明了PE文件的开头位置,现在来说除了第一个字段和最后一个字段有些用处,其他字段几乎已经废弃,当读者通过调用OpenPeFile打开一个PE文件时,则下一步我们需要实现对PE文件有效性及位数的判断,并以此作为参考在后续的解析中使用不同的变量长度...= IsPeFile(OpenPeFile("c://pe/x86.exe"), 0); if (PE == TRUE) { printf("程序是标准的PE文件 \...文件头详细解析 从DOS文件头IMAGE_DOS_HEADER的e_lfanew字段向下偏移003CH的位置,就是真正的PE文件头的位置,该文件头是由IMAGE_NT_HEADERS结构定义的,IMAGE_NT_HEADERS

    38610

    C语言文件j解析

    一、头文件作用 C语言里,每个源文件是一个模块,头文件为使用该模块的用户提供接口。接口指一个功能模块暴露给其他模块用以访问具体功能的方法。 使用源文件实现模块的功能,使用头文件暴露单元的接口。..."C"修饰的变量和函数将按照C语言方式编译和连接,否则编译器将无法找到C函数定义,从而导致链接失败。...四、代码文件组织原则 建议C语言项目中代码文件组织遵循以下原则: 1)使用层次化和模块化的软件开发模型。每个模块只能使用所在层和下一层模块提供的接口。...「【注3】extern "C"」 C++语言在编译时为实现函数重载,会结合函数名、参数数目及类型信息而生成一个中间函数名。...C语言中不支持extern "C"声明,在.c文件中包含extern "C"时会出现编译语法错误。 当然编译器也可以为其他语言提供链接说明。

    2K88

    2.2 PE结构:文件头详细解析

    2.2 DOS文件头详细解析DOS头是PE文件开头的一个固定长度的结构体,这个结构体的大小为64字节(0x40)。...,在C语言文件winnt.h中有对这个DOS结构详细定义,如下所示:typedef struct _IMAGE_DOS_HEADER { WORD e_magic;...则指明了PE文件的开头位置,现在来说除了第一个字段和最后一个字段有些用处,其他字段几乎已经废弃,当读者通过调用OpenPeFile打开一个PE文件时,则下一步我们需要实现对PE文件有效性及位数的判断,并以此作为参考在后续的解析中使用不同的变量长度...= IsPeFile(OpenPeFile("c://pe/x86.exe"), 0); if (PE == TRUE) { printf("程序是标准的PE文件 \n");...文件头详细解析从DOS文件头IMAGE_DOS_HEADER的e_lfanew字段向下偏移003CH的位置,就是真正的PE文件头的位置,该文件头是由IMAGE_NT_HEADERS结构定义的,IMAGE_NT_HEADERS

    51130

    C语言中.h和.c文件解析

    (main .c文件 目标文件 可执行文件)   有了这些基础知识,再言归正传,为了生成一个最终的可执行文件,就需要一些目标文件,也就是需要C文件,而这些C文件中又需要一个main函数作为可执行程序的入口...:理论上来说C文件与头文件里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在头文件中写函数体,只要在任何一个C文件包含此头文件就可以将这个函数编译成目标文件的一部分(编译是以C文件为单位的,如果不在任何...原因如下:   1.如果在头文件中实现一个函数体,那么如果在多个C文件中引用它,而且又同时编译多个C文件,将其生成的目标文件连接成一个可执行文件,在每个引用此头文件C文件所生成的目标文件中,都有一份这个函数的代码...还不是看人家的头文件中的相关声明啊!!!当然这些东东都成了C标准,就算不看人家的头文件,你一样可以知道怎么使用   c语言中.c和.h文件的困惑   本质上没有任何区别。...但是如果.c中的函数也需要调用同个.c中的其它函数,那么这个.c往往会include同名的.h,这样就不需要为声明和调用顺序而发愁了(C语言要求使用之前必须声明,而include同名.h一般会放在.c的开头

    3K40

    C语言中.h和.c文件解析(很精彩)

    (main .c文件 目标文件 可执行文件)   有了这些基础知识,再言归正传,为了生成一个最终的可执行文件,就需要一些目标文件,也就是需要C文件,而这些C文件中又需要一个main函数作为可执行程序的入口...%d\n",test);   }   mytest.h头文件内容如下:   int test; 欢迎加入:C语言/C++学习交流群【734918292】在学的进群一起交流,资料自己群文件下载.   ...C文件与头文件各写什么内容的话题上:理论上来说C文件与头文件里的内容,只要是C语言所支持的,无论写什么都可以的,比如你在头文件中写函数体,只要在任何一个C文件包含此头文件就可以将这个函数编译成目标文件的一部分...还不是看人家的头文件中的相关声明啊!!!当然这些东东都成了C标准,就算不看人家的头文件,你一样可以知道怎么使用   c语言中.c和.h文件的困惑   本质上没有任何区别。...但是如果.c中的函数也需要调用同个.c中的其它函数,那么这个.c往往会include同名的.h,这样就不需要为声明和调用顺序而发愁了(C语言要求使用之前必须声明,而include同名.h一般会放在.c的开头

    1.6K20

    PE格式:手写PE结构解析工具

    ,病毒分析,外挂技术等,在PE文件中我们最需要关注,PE结构,导入表,导出表,重定位表,下面将具体介绍PE的关键结构,并使用C语言编程获取到这些结构数据....参考文献: [琢石成器 Win32汇编语言程序设计 - 罗云彬] 整理学习笔记,精简内容,翻译汇编代码C语言化 在任何一款操作系统中,可执行程序在被装入内存之前都是以文件的形式存放在磁盘中的,在早期DOS...DOS头结构: PE文件中的DOS部分由MZ格式的文件头和可执行代码部分组成,可执行代码被称为DOS块(DOS stub),MZ格式的文件头由IMAGE_DOS_HEADER结构定义,在C语言文件winnt.h...VirtualAddress; difS[temp] = pSection->VirtualAddress - pSection->PointerToRawData; } } 使用C语言实现可能有点复杂...查看节表可以发现RVA地址0000205C也处于.rdata节内,减去节的起始地址0x00002000得到这个RVA相对于节首的偏移是5Ch,也就是说它对应文件为0x00000600+5c = 065ch

    1K20

    PE格式:手写PE结构解析工具

    ,病毒分析,外挂技术等,在PE文件中我们最需要关注,PE结构,导入表,导出表,重定位表,下面将具体介绍PE的关键结构,并使用C语言编程获取到这些结构数据....-- more -->参考文献: 琢石成器 Win32汇编语言程序设计 - 罗云彬 整理学习笔记,精简内容,翻译汇编代码C语言化在任何一款操作系统中,可执行程序在被装入内存之前都是以文件的形式存放在磁盘中的...DOS头结构: PE文件中的DOS部分由MZ格式的文件头和可执行代码部分组成,可执行代码被称为DOS块(DOS stub),MZ格式的文件头由IMAGE_DOS_HEADER结构定义,在C语言文件winnt.h...->VirtualAddress; difS[temp] = pSection->VirtualAddress - pSection->PointerToRawData; }}使用C语言实现可能有点复杂...查看节表可以发现RVA地址0000205C也处于.rdata节内,减去节的起始地址0x00002000得到这个RVA相对于节首的偏移是5Ch,也就是说它对应文件为0x00000600+5c = 065ch

    1.5K20

    PE文件结构

    基本概念 认识PE文件 PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件PE文件是微软Windows操作系统上的程序文件...对于C++代码,Windows文件头的配置使其拥有不明显的区别。 整体结构 PE结构一般来说:从起始位置开始依次是DOS头、NT头、节表以及具体的节。 基地址 程序加载进内存的起始地址。...文件偏 移地址从PE文件的第一个字节开始计 数,起始值为0。用十六进制工具 (例如WinHex、C32等)打开文件 所显示的地址就是文件偏移地址。...这里是 0x000000D0,也就代表偏移0xd0处是NT头的开始位置 NT头(内容多) 有三个成员:PE签名、PE文件头、PE可选头 1、NT头结构信息-PE签名 在一个有效的PE文件里,Signature...对于C++代码,Windows文件头的配置使其拥有不明显的区别。 2、PE文件中的数据结构一般都有32位和64位之分,如IMAGE_NT_HEADERS32、IMAGE_NT_HEADER64等。

    21810

    PE文件简介

    PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件PE文件是微软Windows操作系统上的程序文件(可能是间接被执行...文件的优势: 磁盘上的数据结构与在内存中的结构是一致的 相关名词: 入口点(EntryPoint):程序执行的第一条指令所在的内存地址 文件偏移地址(FileOffset)PE文件存储在磁盘上的时候...pe文件大致结构如下图所示: 一般在说到PE文件时都会涉及到以下几个名词 基地址(ImageBase):PE文件被加载到内存中的首地址,是这个模块的句柄,可以使用函数GetModuleHandle...来获取 文件的偏移地址:PE文件中各个部分相对于文件头的偏移 相对虚拟地址(RVA):PE结构被映射到内存中后,某个位置所在内存相对于基地址的偏移 一般可执行文件PE加载器加载到内存中后,...文件的基本格式不会发生改变,只是会将各个块按照页来进行对其,PE文件在磁盘与在内存中的对应关系大致如下图所示: image.png

    1.4K20

    c语言oj得pe,ACM入门之OJ~

    Output Limit Exceed,OLE)、超内存(Memory Limit Exceed,MLE)、运行时错误(Runtime Error,RE)、格式错误(Presentation Error,PE...实际上评测系统是把程序的标准输入输 出数据都是放在文本文件里,你提交的程序会先经过编译,然后运行,从输入文件中读取数据,然后把结果输 出到一个文本文件中,评测系统再把标准的输出文件和你提交的程序运行的结果的输出文件进行对比...C语言代码: #include int main() { int a,b; scanf(“%d %d”,&a, &b); printf(“%d\n”,a+b); return0; } C++语言代码...C语言代码: 1 #include 2 int main() 3 { 4 int a,b; 5 while(scanf(“%d %d”,&a, &b) !...C语言代码: 1 #include 2 int main() 3 { 4 int a, b; 5 while (scanf(“%d%d”, &a, &b) !

    1.4K10

    PE格式:实现PE文件特征码识别

    PE文件就是我们常说的EXE可执行文件,针对文件特征的识别可以清晰的知道该程序是使用何种编程语言实现的,前提是要有特征库,PE特征识别有多种形式,第一种是静态识别,此方法就是只针对磁盘中文件的特征码字段进行检测来判断编译器版本...打开PE文件映射: 在读取PE结构之前,首先要做的就是打开PE文件到内存,这里打开文件我们使用了CreateFile()函数该函数可以打开文件并返回文件句柄,接着使用CreateFileMapping(...PE文件规范即可,这里需要注意32位于64位PE结构所使用的的结构定义略有不同,代码中已经对其进行了区分....PE句柄 lpMapAddress = OpenPeFile("c://lyshark.exe"); // 判断是否为PE文件,这里定义的为真返回1,为假返回0 BOOL ret = IsPeFile...(lpMapAddress, 0); printf("是否为PE文件: %d \n", ret); system("pause"); return 0; } 判断PE文件特征码: 判断程序使用了何种编译器编写

    1.3K20

    PE文件详解(三)

    本文转自小甲鱼的PE文件详解系列传送门 PE文件到内存的映射 在执行一个PE文件的时候,windows 并不在一开始就将整个文件读入内存的,二十采用与内存映射文件类似的机制。...也就是说,windows 装载器在装载的时候仅仅建立好虚拟地址和PE文件之间的映射关系。...但是要注意的是,系统装载可执行文件的方法又不完全等同于内存映射文件。...Windows 装载器在装载DOS部分、PE文件头部分和节表(区块表)部分是不进行任何特殊处理的,而在装载节(区块)的时候则会自动按节(区块)的属性做不同的处理。...内存页的属性: 对于磁盘映射文件来说,所有的页都是按照磁盘映射文件函数指定的属性设置的。但是在装载可执行文件时,与节对应的内存页属性要按照节的 属性来设置。

    69430

    PE文件小知识

    一、 PE文件格式的基础知识 1.1 认识PE文件 PE文件中文的意思就是可执行文件,常见的exe、dll、ocx、sys等都是PE文件格式的。...对于c++代码,windows文件头的配置使其拥有不明显的区别。 PE文件中的数据结构一般都有32位和64位之分,如IMAGE_NT_HEADERS32、IMAGE_NT_HEADER64等。...文件偏 移地址从PE文件的第一个字节开始计 数,起始值为0。用十六进制工具 (例如WinHex、C32等)打开文件 所显示的地址就是文件偏移地址。...C、NT头结构信息-PE可选头 (IMAGE_OPTIONAL_HEADER)是一个可选的结构,但实际上IMAGE_FILE_HEADER结构不足以定义PE文件属性,因此可选映像头中定义了更多的数据,...在.rsrc节中进程存储的字符串是为了提供多种语言支持的。

    14410

    PE文件详解(六)

    每个被 PE文件链接进来的 DLL文件都分别对应一个 IID数组结构。...+ 0x00028000 = 0x00028000读取在这个位置的信息发现,OriginalFirstThunk = 0x0002A15C,这个偏移,发现它仍然在这个节中,通过上述公式计算得出,他在文件中的偏移地址为...:0x0002815C 从这个位置得到的值来看,它的最高值为0,也就是IMAGE_THUNK_DATA保存的是函数名的字符串,字符串的RVA为0x0002A2DC,通过计算得到它在文件中的偏移为...从图上可以看出这个地址所对应的值正好是函数的名称MessgeBoxA 通过FirstThunk成员找到函数名称 首先根据PE文件的内容,可以知道,输入函数表在PE文件的偏移为0x00028000,而根据这个结构来看...我们发现这个值得高地址为是0,那么它所指向的应该就是函数名称,我们寻址到这个地址,发现它正好是函数名称 接下来,再来解析函数地址,在0x0002a010中找到对应的FirstThunk值,

    1K20

    C语言文件操作_C语言调用文件

    文章目录 文件打开与关闭 文件读写操作 读/写文件中的字符串 格式化读写文件操作 文件定位函数 作业使用案例(自己可以全部完成一遍): 文件打开与关闭 C文件操作用库函数实现,包含在stdio.h中。...文件使用方式: 打开文件文件读/写→关闭文件 系统自动打开和关闭三个标准文件: 标准输入——键盘 stdin 标准输出——显示器 stdout 标准出错输出—–显示器 stderr...文件读写操作 当我们把文件打开之后,就可以对它进行读与写的操作。...读/写文件中的一个字符 文件I/O与终端I/O的关系 案例: 例如:从键盘输入字符,逐个写入文件,直到输入一个“#”为止。...C语言规定的起始位置有三种,分别为文件开头、当前位置和文件末尾,每个位置都用对应的常量来表示: 例如:把位置指针移动到离文件开头100个字节处: fseek(fp, 100, 0);

    9.4K10
    领券