EXE文件结构和读取方法

EXE文件结构和读取方法

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

一、EXE文件概念

     EXE File英文全名executable file 。译作可运行文件,可移植可运行 (PE) 文件格式的文件,它能够载入到内存中。并由操作系统载入程序运行,是可在操作系统存储空间中浮动定位的可运行程序。如记事本程序notepad.exe ,能够用来编辑文档,如:測试.txt双击打开notepad.exe记事本程序来进行编辑处理。

二、EXE文件结构

      EXE文件分为两个部分: EXE文件头和程序本体。exe文件比較复杂,属于一种多段的结构。是DOS最成功和复杂的设计之中的一个。每一个exe文件包括一个文件头和一个可重定位程序的映像。文件头包括MS-DOS用于载入程序的信息,比如程序的大小和寄存器的初始值。文件头还指向一个重定位表,该表包括指向程序映像中可重定位段地址的指针链表。

MS-DOS通过把该映像直接从文件拷贝到内存载入exe程序,然后调整定位表中说明的可重定位段地址。定位表是一个重定位指针数组。每一个指向程序映像中的可重定位段地址。  预知具体原理与结构,请点击EXE文件结构及原理

                                  EXE文件结构和读取方法

                                                           上表是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文件说明

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117803.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 解决 SVN Skipped ‘xxx’ — Node remains in conflict

    解决 SVN Skipped ‘xxx’ — Node remains in conflict

    2021年10月19日
    63
  • dsp指令ixh_C24XX系列DSP移位指令总结[通俗易懂]

    dsp指令ixh_C24XX系列DSP移位指令总结[通俗易懂]C24XX系列DSP移位指令总结徐丽红王佰营TI公司C24XX系列DSP的移位指令很有特色而且效率很高;一般的移位功能不用专门的指令实现而是作为其他指令中的一个功能给出,并且移位并不占用CPU额外时间。以下整理出了DSP常用的移位指令:一、两类移位指令1>显性移位指令,移位次数由指令直接给出:1add—sub←0—162and—or—xor←#L3lacc←0—164sach—sacl←…

    2022年5月18日
    66
  • 解决VMware 15虚拟机桥接模式无法上网 问题

    解决VMware 15虚拟机桥接模式无法上网 问题详细描述解决VMware15虚拟机桥接模式无法上网问题步骤1:查看本地以太网属性是否安装VMwareBridgeProtocol控制面板>>网络和Internet>>网络连接>>以太网右键属性>>查看是否有安装VMwareBridgeProtocol共享网络给虚拟机(有些电脑不用)步骤2:查看VMware虚拟网络编辑器的VMne…

    2022年6月6日
    111
  • matlab vargin_matlab varargin

    matlab vargin_matlab varargin写了一个函数:functiontest(varargin)  那么在这个函数里,varargin就是一个cell数组,它包含了用户输入的参数。下面是一个例子:functiontest(varargin)disp([‘narginis’num2str(nargin)]);forv=1:numel(varargin)      disp([‘vararg

    2025年5月24日
    3
  • 关于python的论文参考文献_java毕业论文参考文献

    关于python的论文参考文献_java毕业论文参考文献java论文参考文献英文时间:2015-06-12来源:未知本文字数:14132字作者:小韩单位:在写java毕业论文或高水平java学术论文时,要求参考一些java英文参考文献,外文文献一般体现了国际最新研究进展,让我们写的java论文与国际接轨,为了方便大家,这里学术堂整理了150篇Java论文参考文献英文。更多2020年最新java论文参考文献英文,请在文章末尾处查看。java论文参考…

    2022年9月28日
    0
  • HTML实体对照表

    HTML实体对照表

    2021年10月20日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号