损坏的二进制文件会导致“程序太大而无法放入内存”

news2024/11/24 19:10:12

不知道你是否做过这样的小实验:将一个可执行文件的头部写入一些无效的数据,或者将一个根本不是可执行文件的大型文件的扩展名改为”.exe”,然后执行它(警告,请记得先保存好工作文件)。

文件不会如预期般那样执行,你会得到一个提示:”程序太大而无法装入到内存”。
为什么会有这样的提示,为什么操作系统部直接提示程序文件被损坏了?

因为在某种意义上,文件实际上并没有损坏。

一个 Win32 可执行文件包含了一个所谓的 “MZ” 头,接下来是一个 “PE” 头。如果 “PE” 头没有被找到,则操作系统加载器将尝试以 Win16 可执行文件格式来加载它,它由一个 “MZ” 头和一个 “NE” 头组成。

如果在 “MZ” 之后,”PE” 和 “NE” 这两个头都没有找到,则加载器会尝试以 MS-DOS 可重定向执行文件来执行它。如果连 “MZ” 头都没有找到,则加载器会以 MS-DOS 非可重定向执行文件(也叫做 “COM 格式”,因为这种情况是 CP/M.COM 文件的格式)来执行它。

如下图所示:

>> 请移步至 topomel.com 以查看图片 <<

如果你观察一下,你会发现,无论你在图表中走哪条路,你总会得到一些东西。没有一条所谓的 “程序损坏” 的退出路径。

但是 “程序太大而无法放入内存” 从何而来?

如果程序的头部已损坏,则头中的各种字段(例如指定程序所需内存量的字段)通常是无意义的值。加载程序看到一个需要 800KB 常规内存的 MS-DOS 可重定位程序,这就是 “内存不足” 错误提示的来源。

MS-DOS 不可重定位程序不包含有关内存要求的此类信息。加载不可重定位程序的规则只是将程序加载到单个 64KB 内存块中并对其进行设置。因此,没有 “MZ” 头但大小大于 64KB 的程序将不适合单个 64KB 块,从而导致 “内存不足” 的错误。

另外,有些朋友一定会问下面的问题,我来一一解答:

MZ
传奇人物 “Mark Zbikowski” 的首字母缩写。

NE
“New Executable”,那个时候 Windows 还是所谓的 “新人”

PE
“Portable Executable”,因为 Windows NT 的特性之一是它可移植到 x86 以外的架构。

LE
“Linear Executable”,由 OS/2 和 Windows 95 设备驱动程序使用。

总结

如果是开发应用程序,而不是操作系统,在一段数据一开始就被检测到是无效的,我们应该立即停止后续处理,给出错误提示,并崩溃退出。
容忍度:零。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why does a corrupted binary sometimes result in “Program too big to fit in memory”?》

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652235.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python 随练】不相同的三位数字

题目&#xff1a; 有 1、2、3、4 个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;在控制台输出出来。 简介&#xff1a; 在本篇博客中&#xff0c;我们将使用Python代码解决一个数学问题&#xff1a;如何使用数字1、2、3和4组合成互不相同且无重复…

Vue 常用指令

指令介绍 指令 : 带有 v- 前缀的特殊属性。 指令的作用 : 当表达式的值改变时&#xff0c;将其产生的连带影响&#xff0c;响应式地作用于 DOM 。 在整个vue的编写过程当中&#xff0c;只要带v-的&#xff0c;那么都是常用的vue的指令。 v-text v-text作用与双大花括号作用…

【已解决】“X-Content-Type-Options”头缺失或不安全

Appscan是一款安全漏洞扫描软件&#xff0c;由IBM公司研发&#xff0c;后又被卖给了印度公司HCL。 在web安全测试中&#xff0c;今天我们说下扫描结果中包含X-Content-Type-Options请求头header的缺失或不安全的时候&#xff0c;我们该如何应对。 风险&#xff1a;可能会收集…

华为OD机试真题 JavaScript 实现【猴子爬山】【2023 B卷 100分】,附详细解题思路

一、题目描述 一天一只顽猴想去从山脚爬到山顶&#xff0c;途中经过一个有个N个台阶的阶梯&#xff0c;但是这猴子有一个习惯&#xff1a; 每一次只能跳1步或跳3步&#xff0c;试问猴子通过这个阶梯有多少种不同的跳跃方式&#xff1f; 二、输入描述 输入只有一个整数N&…

使用Linux系统命令对后门端口进行查杀

第一步&#xff0c;打开网络拓扑&#xff0c;启动实验虚拟机&#xff0c;查看虚拟机IP地址&#xff1a; Centos Linux 第二步&#xff0c;进入靶机服务器CentOS Linux&#xff0c;调用实验环境。使用docker images命令查看靶机服务器上的Docker镜像环境&#xff0c;找到本次实…

《水经注地图服务》横向扩展部署说明

在地图服务器中&#xff0c;随着数据量的不断增大&#xff0c;可能会存在原有的存储设备空间不够的情况&#xff0c;或无法承受高并发请求的情况。 此时&#xff0c;我们就可以通过横向扩展部署&#xff0c;增加新的设备来进行分担缓减&#xff0c;从而达到动态扩展存储设备以…

华为流程体系:IPD流程框架(限制版)

目录 前言 详细内容 专栏列表 CSDN学院课程地址 前言 今天主要来谈谈 IPD 体系的主体框架所涉及的一些相关内容。 其实关于 IPD 体系&#xff0c;我在之前的文章或课程中都有过不同程度的讲解。 但是&#xff0c;由于这个体系所涉及的面是非常广泛的。 这个时候就必须通…

加固你的数据防线:避免成为SQL注入攻击的下一个目标

SQL注入是一种常见的Web应用程序安全漏洞&#xff0c;攻击者利用该漏洞通过构造恶意的SQL查询语句&#xff0c;以执行未经授权的操作或获取敏感数据。本文将介绍SQL注入的概念、攻击原理以及常见的防范方案&#xff0c;帮助开发人员和系统管理员加强对Web应用程序的安全性。 1、…

深入理解迭代器,笛卡尔积,from itertools import product 小白一看就会

文章目录 一、product()是什么&#xff1f;二、product()的具体使用案例代码详细分析 总结 一、product()是什么&#xff1f; 在Python中&#xff0c;product()是内置函数itertools提供的一个工具函数&#xff0c;可以计算多个可迭代对象的笛卡尔积。product()接受一个或多个可…

7、微服务组件gateway

1、引入gateway 在原来的项目中添加gateway模块 gateway是springcloud中的组件&#xff0c;所以要确保父项目的pom.xml中引入了springcloud 那么在gateway模块的pom.xml中引入gateway&#xff0c;如下&#xff1a; <?xml version"1.0" encoding"UTF-8&quo…

Jmeter集成到jenkins

Jmeter集成到Jenkins 序号 修改人 版本 创建日期 修改日期 备注 1 进击的雷神 V1.0 Jmeter集成到Jenkins. 1 软件下载... 4 一:环境配置... 4 1.JDK安装&#xff…

ADC动态指标

量化误差ADC输出-ADC模拟输入 量化噪声功率&#xff1a; 信噪比&#xff1a; 由于仅仅考虑了量化噪声&#xff0c;上式为ADC的SNDR所能达到的极限值 N8,SNDR_max50dB N12,SNDR_max74dB N16,SNDR_max98dB N20,SNDR_max122dB 实际ADC还需要考虑期间噪声和电路非理想特性&am…

Python10行以内代码能有什么高端操作

Python10行以内代码能有什么高端操作 Python凭借其简洁的代码&#xff0c;赢得了许多开发者的喜爱。因此也就促使了更多开发者用Python开发新的模块&#xff0c;从而形成良性循环&#xff0c;Python可以凭借更加简短的代码实现许多有趣的操作。下面我们来看看&#xff0c;我们…

关于组织申报国家重点研发计划“高性能制造技术与重大装备”等重点专项2023年度项目的通知

源自&#xff1a;上海市科学技术委员会 各有关单位&#xff1a; 根据《科技部关于发布国家重点研发计划“高性能制造技术与重大装备”等6个重点专项2023年度项目申报指南的通知》&#xff08;国科发资〔2023〕90号&#xff09;《科技部关于发布国家重点研发计划“文化科技与现…

Linux---端口(nmap、netstat)、进程管理(ps、kill)

1. 端口 端口&#xff0c;是设备与外界通讯交流的出入口。端口可以分为&#xff1a;物理端口和虚拟端口两类。 物理端口&#xff1a;又可称之为接口&#xff0c;是可见的端口&#xff0c;如USB接口&#xff0c;RJ45网口&#xff0c;HDMI端口等。 虚拟端口&#xff1a;是指计…

制定测试计划和测试用例

制定测试计划和测试用例 测试是软件开发过程中很重要的一环&#xff0c;通过测试可以发现和修复软件中的缺陷或错误&#xff0c;保证软件的质量和可靠性。在进行软件测试时&#xff0c;制定合理的测试计划和测试用例是非常必要的&#xff0c;下面我将从这两个方面分别进行讲解。…

第10篇:强化学习Q-learning求解迷宫问题 代码实现

你好&#xff0c;我是郭震&#xff08;zhenguo&#xff09; 今天重新发布强化学习第10篇&#xff1a;强化学习Q-learning求解迷宫问题 代码实现 我想对此篇做一些更加详细的解释。 1 创建地图 创建迷宫地图&#xff0c;包括墙网格&#xff0c;走到墙网格就是负奖励。 注意&…

使用JRS303校验对参数进行提前校验

文章目录 前言JRS303简单使用版本JRS303提供的常用校验注解 JRS303进阶使用版本情景一&#xff1a;对于一个主键id字段我想要新增的时候不校验 但是更新的时候进行校验情景二&#xff1a; 在实际项目中 我们有一些字段只能填入规定的几个值 类似于枚举 那么就需要我们编写自定义…

N-Gram语言模型工具kenlm的详细安装教程

【本配置过程基于Linux系统】 下载源代码&#xff1a; wget -O - https://kheafield.com/code/kenlm.tar.gz |tar xz 编译&#xff1a; makdir kenlm/build cd kenlm/build cmake .. && make -j4 发现报错&#xff1a; 系统中没有cmake&#xff0c;按照错误提示&am…

华为认证 | HCIA-SDN 考试大纲

01 考试概述 02 考试范围 HCIA-SDN V1.0考试覆盖数据通信基础知识&#xff0c;SDN架构&#xff0c;SDN二、三层网络原理&#xff0c;SDN接口协议原理比如OpenFlow协议、Netconf协议、RestFul协议原理&#xff0c;以及在华为交换机与路由器中的实现。 SDN二三层技术&#xff1…