文件都是以二进制存储,那么一个txt改成exe,是否有几率可以运行?

寂灭轮回-情殇


下边一堆罗里吧嗦的,无格式文本,多几个回车,按批处理去做,直接执行,就是命令行一样。放应用层上就是 SHELL 或者BAT,也就是 DOS 的批处理。看具体编译器或者系统了,不要研究这种东西,跨平台就废了,当然有一些,比如小型机,比如 UNIX 的solaris,还是没什么界面需求的。你这个问题问的就有问题,其实写代码最终还在逻辑和架构,天天追求这种效率,和 IDE环境,就走偏了。哪怕你写伪代码让团队人看懂了,去高效执行,而不是吹嘘所谓自己都不明白的效率或者架构逻辑,你要做后者才是真浪费团队资源。文件除了 TXT 大多数都是有文件头格式的,也就是所有的加密和特殊处理,都是在文件头信息文本里边做文章,你自己度娘或者谷歌一下吧。


苍穹一啸


题主这个问题太正常了,txt是万能,你可以用txt编写任何程序,只需要将扩展名修改成编程语言对应的后缀就可以在对应的编译器或者解释器中运行,如果你要把它变成exe文件再打包下就行了。

如果题主你要说不要打包,直接改后缀从txt变成exe,那就比较难写了,需要高手,我这有一个不需要高手就可以验证的方法,下图我用一个例子说明这个问题

这里我就以navicat这个软件为例(选题没啥理由,随手点开的)

1.我先把navicat.exe剪切放到其他地方

比如桌面,注意时间是2019.3.20 21:50

2.再在此目录下新建一个navicat.txt文件

时间2019.5.17 10:47, 证明是新建的

3.用记事本打开navicat.exe,将字符串复制到navicat.txt中

当然你可以在txt中手写一遍。

4.再将navicat.txt改成navicat.exe

时间是2019.5.17 10:47 ,证明是由txt改过来的。

5.执行新的navicat.exe,

完美执行。

6.原版跟由txt改成exe版文件对比,文件一模一样

结论:完全没问题,打开正常。

你看我是把字符串直接写在txt文件里,然后改扩展名为exe的,虽然这个写的动作是复制粘贴,但完全说明了题主提出的问题。


有初有终


做个实验就知道了,现在有一个txt文件格式的文件和一个exe文件格式的文件,先把txt文件的内容清空,然后将exe文件以记事本方式打开把里面的内容全部拷贝到开始清空过的txt文件里面,最后把txt文件的后缀名改为.exe运行一下试试


y迭名先生y


结论:抛开平台说文件,都是不负责任的。本文教你文件的正确打开方式。


前言

题主之所以造成这些疑惑,主要是对计算机操作系统处理文件的机制不明所致。


文件类型

描述“文件都是以二进制存储”,是不准确的。

分两个平台说。


1 - windows

Windows系统文件按照不同的格式和用途分很多种类,为便于管理和识别,在对文件命名时,是以扩展名加以区分的,即文件名格式为: filename.ext。

这样就可以根据文件的扩展名,判定文件的种类,从而知道其格式和用途。

这些文件都有其存储格式,在磁盘上使用二进制/十六进制存储,

但是,如何读这些文件就成了问题,计算机认识,而人不认识。

要看这些文件,你用什么方式读取,什么编码方式读取,这造成了误差。


2 - Linux

哲学宗旨:“一切皆文件”。

所有的内容都是用文件去对待。文件扩展名没有什么意义。只与文件类型有关。

Linux的文件类型有下面这些。

  1. - : regular file
  2. d : directory
  3. c : character device file
  4. b : block device file
  5. s : local socket file
  6. p : named pipe
  7. l : symbolic link

文件类型使用 ls 指令查看。


可执行文件

现在要说到题主所说的“可以运行”。

exe后缀的文件是二进制的可执行文件,可执行文件将包含其中包含数据的段。

Windows使用PE格式。PE格式有一个包含机器指令的部分。这些指令只是按顺序排序的数字,CPU可以理解它们。

举例,对于函数MessageBox()的调用将经历一下过程:

  1. 具有位于DLL中的函数的地址。此地址由编译器输入。

  2. 将参数“推”到堆栈上的指令。

  3. 实际的函数调用。

  4. 某种清理(取决于调用约定)。

需要牢记的是,EXE文件只是特殊格式的文件。你可以使用诸如Visual Studio等工具对其进行反汇编查看。


windows下,可直接执行的文件,不只有 exe。比如 bat 批处理文件,vbs 脚本文件,因为操作系统有 wscript 宿主环境,可直接运行。贴两个文件示例。

上面这个是批处理bat文件。

上面这个是vbs文件。


同样的,如果系统有java环境,你也可直接运行 jar 文件。同理,python 环境可直接运行 py 文件。


结语

就不展开说了吧,关于文件系统的知识,远非一两句所能说清楚,其中涉及的编译原理,操作系统,等等知识,需要题主自己去摸索。


我是@程序员小助手,持续分享编程与程序员成长相关的内容,欢迎关注~~

程序员小助手


无法运行。

在Windows系统中,可执行文件需要遵循PE格式。

一个完整的PE文件需要包含很多内容,比如导入表,导出表,资源表,异常表,属性证书表,基地址重定位表等等各种信息。这些信息定义了一个可执行文件的logo图标,用到的图片音频等等资源,以及这个可执行文件是否需要加载外部动态链接库(也就是很多人安装完了软件看到一大堆dll文件感觉没什么用就删掉了导致软件启动后就报找不到文件的错误)。

所以,对于电脑来说不是一个简单的后缀改成exe就能运行了,这个后缀只是Windows下的一个约定。让操作系统看到这个后缀就用可执行文件来装载和执行。如果一个TXT文件改成exe ,系统按照可执行文件去加载,会发现啥都没有,就会拒绝执行。除非。你的TXT文件严格按照PE格式去编辑。

有些黑客倒是会把exe格式的木马隐藏后缀名假装成txt文件传播。

附图是我在2011年做的Windows的pe格式解析工具。已经开源并传到在csdn共享,有兴趣的可以交流。

没错,工具上的小美女是2011年最红的杨幂。。。。



老居


肯定不行啊!无论exe还是TXT,或者是jpg,aac,等等,这些仅仅是一种文件的编码规范,识别它们的不是计算机底层的硬件,而是上层的应用软件和操作系统遵循特定的协议。

虽然不管是什么文件最终到达计算机底层,也就是硬件逻辑层,都是以0101代码呈现的,但是无论是exe还是TXT,他们并不是机器代码,也就是说并不是0101码,而是一种乱序码,只有遵循其相关的协议才能将其转换为机器可识别的代码,这个过程类似于加密,但是密钥是对外授权的,谁都可以拥有。

举个例子你去银行保险柜取东西,保险柜编号是2号,你的钥匙必须是二号才能将其解锁,假设这个2号柜子任何用户都可以访问,不上锁肯定不好,所以只能把2号钥匙分发给所有需要的人,但是你拿来了一个3号的钥匙,想去开2号柜子肯定不可能,你把2号柜子的数字改成了3号,你还是打不开。

TXT是一种通用的文档编码规范,可以说是很多平台都在使用的,计算机在打开这种文件的时候会先判定适合用什么方式打开,我们最后看到的结果是机器翻译的结果,首先CPU是没有办法直接翻译TXT文件的,除非CPU内部专门集成用于处理TXT的核心。CPU收到的永远是机器指令,比如TXT文档中的字是我爱你,如果直接交给CPU是没有办法的打出来的,首先会交给支持TXT文件的应用软件或者操作系统本身就支持,但看到的也不是几个字,而是相关代码,但是这个相关代码是有对应关系的,比如我对应5#,爱对应2@,你对应1A,但是软件不知道,它只能请求CPU,CPU接受到命令之后开始去对应的编码表里面去查询,然后读取到数据就是我爱你,最后告知软件,其实这一步CPU自己并不知道自己取的是什么内容,只是按照软件的请求执行,所以整个计算机系统实际上CPU从来不知道自己做得是什么,它只是执行上层传下来的命令,这个命令语言到达CPU已经变了好几次了。

可以说应用软件和操作系统之间有自己的交流语言,同样操作系统和底层硬件之间也有交流的语言,为了同一好管理,所以制定了规范和协议,无论是硬件商还是软件商都需要按照这个规范来,这就形成了所谓的生态。

虽然Windows可以直接运行exe文件,但毕竟是TXT改过来的,操作系统一眼就识别出来了,一方面根本找不到程序入口,另一方面,这个TXT改过来的exe文件,操作系统根本不知道怎么处理,说它是一条狗吧!又长着羊的犄角,这种不三不四的东西,Windows翻遍了再自己那注册所有软件,它们都一一摇头,没见过。


疯瓶儿


可以的,这事情我干过。也就是用汇编语言写一段程序,汇编成exe就能运行。EXE文件头部是储存空间,比如你定义一个255长度字符串常量,它就真的留255位置在EXE里面。机器码和汇编之间转换是很方便的。EXE文件用debug打开可以看到里面的内容。直接修改也没问题,可以绕过源代码直接改常量


切问近思61177173


我刚才用txt手搓了一段0和1还原了ATM机的源代码。现在给我打5块钱就可以拿着这个txt去任意ATM机取钱……



毛茸茸的猹


exe有严密的格式要求,txt改exe是没法执行的,改成bat或cmd倒是可以的


杭州山不高


粗略看了一下,好多不懂装懂的,你把一个可以正常运行的exe文件改成txt,那这个txt改回exe还是可以运行的,问题只是说可能。


分享到:


相關文章: