EXE文件结构和读取方法
一、EXE文件概念
EXE File英文全名executable file 。译作可运行文件,可移植可运行 (PE) 文件格式的文件,它能够载入到内存中。并由操作系统载入程序运行,是可在操作系统存储空间中浮动定位的可运行程序。如记事本程序notepad.exe ,能够用来编辑文档,如:測试.txt双击打开notepad.exe记事本程序来进行编辑处理。
二、EXE文件结构
EXE文件分为两个部分: EXE文件头和程序本体。exe文件比較复杂,属于一种多段的结构。是DOS最成功和复杂的设计之中的一个。每一个exe文件包括一个文件头和一个可重定位程序的映像。文件头包括MS-DOS用于载入程序的信息,比如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包括指向程序映像中可重定位段地址的指针链表。
MS-DOS通过把该映像直接从文件拷贝到内存载入exe程序,然后调整定位表中说明的可重定位段地址。定位表是一个重定位指针数组。每一个指向程序映像中的可重定位段地址。 预知具体原理与结构,请点击EXE文件结构及原理
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2ZlbmdjYW55dWV4ag==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
上表是EXE文件头
三、EXE文件打开方法
因为EXE文件比較特殊,打开方式也有点特殊。需指定格式,见以下代码:
#include<iostream>
#include<string>
#include<fstream>
#include<ios>
using namespace std; const int BUFFER_SIZE=1024; void update(ifstream& in)
{
if (!in)
{
return;
}
std::streamsize length;
char buffer[BUFFER_SIZE];
while (!in.eof())
{
in.read(buffer, BUFFER_SIZE);
length = in.gcount();
if (length > 0)
{
printf("%s",buffer);
}
}
in.close();
} int main()
{
update(ifstream("1.exe", ios_base::binary));
return 0;
}
当中。ios_base 是C++标准程序库中的一个类,定义于<ios>头文件里。
ios_base类封装了C++标准中的流输入输出中不依赖于读写的数据的类型的基本信息,如格式化信息、异常状态、事件回调函数等。
大约PE头,可以参考PE文件说明。
EXE文件结构和读取方法的更多相关文章
- EXE文件结构及读取方法
一.EXE文件概念 EXE File英文全名executable file ,译作可运行文件,可移植可运行 (PE) 文件格式的文件,它能够载入到内存中,并由操作系统载入程序运行.是可在操作系统存储空 ...
- 05、解剖CEL文件各版本格式和读取方法(非R语言)
相比DAT文件,网络上更支持CEL级别的文件.CEL已经把DAT图像转换成数据了,而且CEL比DAT所占空间小得多.介绍一下CEL文件的格式,CEL文件有文本文件(TextCelFile,版本3).B ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- JAVA文件的两种读取方法和三种写入方法
在使用java对文件进行读写操作时,有多种方法可以使用,但不同的方法有不同的性能. 此文对常用的读写方法进行了整理,以备不时之需. 1.文件的读取 主要介绍两种常用的读取方法.按行读取和按字符块读取. ...
- html网页调用本地exe程序的实现方法:
html网页调用本地exe程序的实现方法:1.新建注册表具体文件: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\hhtpexe] [ ...
- python之xml 文件的读取方法
''' xml 文件的读取方法 ''' #!/usr/bin/env python # -*- coding: utf- -*- import xml.etree.ElementTree as ET ...
- vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
vs2010一运行就报错deven.exe assert failure 解决方法,卸载系统中.netFramework最新版本的(简体中文)
- cocos在win平台exe无法使用 UserDefault 解决方法
exe模拟器用来调度cocos本来是很方便的事情,但最近很多win10策划无法调用UserDefault.一直以为是权限问题,今天有空读一下码才发现.原来是cocos的bug.存在本地的UserDef ...
- [XAML]类似WPF绑定的Binding的读取方法
在WPF的XAML里,依赖属性可以使用基于BindingBase之类的MarkupExtensin 读取XAML时,会自动的把该BindingBase转换为BindingExpressionBase ...
随机推荐
- 2388 Who's in the Middle(简单排序)
训练计划的第一个问题,首先从水问题开始:排序的数组,中间数则输出. http://poj.org/problem?id=2388 冒泡排序: #include <iostream> usi ...
- 窗体透明,但窗体上的控件不透明(简单好用)good
1.在Delphi中,设置窗体的AlphaBlend := true;AlphaBlendValue := 0-255; AlphaBlendValue越小窗体的透明度就越高.这种方法将会使窗体和窗体 ...
- Lisp的永恒之道 好文
http://www.cnblogs.com/weidagang2046/archive/2012/06/03/tao_of_lisp.html
- That's life,多一些韧性,才有更多的任性(转)
如果是正确的选择,就不要遵守太多规则. 若有容纳之心,便丰富了自己,也闪了他人,平常心,平常事 阅读,是保持时尚最节约的方式,也是快乐的源泉.可人生难免失意,有了快乐的能力,还应有面对沮丧的心胸. 相 ...
- Xcode免证书真机调试,解决cannot read entitlement data问题
本文是根据某个帖子写的(帖子链接在最后放出),但是在配置的过程中,遇到了一个纠结的问题,这个问题折腾了我N久,一直没搞明白到底是什么原因,问题如下: 按照原帖上写的每一步去做了,但是在最后编译的时候出 ...
- 常见问题(FAQ) | VPNCUP
常见问题(FAQ) | VPNCUP 常见问题(FAQ) 关于FAQ 新手开始 登录验证问题 为什么刚注册后,登录VPN服务器提示错误? 免费注册的用户有哪些限制? 为什么连接免费VPN后20分钟自动 ...
- svn经常使用命令具体解释(非常全,非常有用)
ubuntu下安装subversionclient: sudo apt-getinstall subversion subversion-tools 1.检出 svn co http://路径(文 ...
- Android拖动和缩放图片
Android拖动和缩放图片 2014年5月9日 我们在使用应用其中常常须要浏览图片.比方在微信其中.点击图片之后能够对图片进行缩放. 本博客介绍怎样对图片进行拖拽和缩放.这首先要了解Android中 ...
- 俄罗斯方块游戏JavaScript代码
JavaScript代码俄罗斯方块游戏 早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下(主要是以注释的形式). 我用 ...
- WPF案例(-)模拟Windows7 Win+Tab切换
原文:WPF案例(-)模拟Windows7 Win+Tab切换 一个使用Wpf模拟Windows7 Win+Tab页面切换的小程序,使用快捷键Ctrl+Down或Ctrl+Up在示例程序各个页面元素之 ...