windows操作系统的有些疑惑。
Q1:
exe文件属于二进制文件,而二进制文件打开是必须要通过响应的软件打开吗?
Q2:
txt属于文本文件。打开文本文件时候只需通过相应软件比如记事本或写字板打开直接输出到显示屏上吗?我的简要意思是文本文件不需要经过cpu编译,然后直接按编码格式输出就可以?
Q3:
文件是数据和指令的集合,意思打开任何文件都要运行该文件上的指令?
Q4:
如果我有一个exe文件想追加到txt文件后面,打开txt文件来运行追加到后面的代码,这样可以吗?
Q5:
我想实现一个可以把exe文件和txt文件捆绑成一个exe文件,然后打开捆绑后的exe文件运行exe文件和txt文件,请问这个怎么实现?网上有响应的软件,但都是被加了木马的…
最后,感谢回答,谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我就不一一解答了,概括起来讲解一下。在 Windows 系统上,不管你打开任何程序或文件,最终本质上都是创建了一个进程,或者说打开了一个程序。不管是程序还是文本文件,其本质上都是位于电脑上的一段数据,在 Windows 系统上使用扩展名的不同来区分它们。那么为什么 exe 打开后可以执行,而 txt 却是显示内容呢?事实上,Windows 的桌面,或者称作外壳,它本身帮你完成了针对不同扩展名创建不同的进程。当你在系统中双击一个 txt,系统并不是直接执行这个 txt,而是根据注册表记录的文件关联来决定如何创建进程。通常,exe 的文件关联写成
%*
那就是说所有参数都会原模原样的传入CreateProcess
,即 exe 文件会被执行。而 txt 的文件关联在注册表中默认记录为notepad.exe "%1"
,则外壳程序会创建记事本进程,并将文本文件传入第一个参数。注意 txt 本身没有被执行,这里执行的是记事本,txt 的路径只是作为参数传入。一句话,外壳只是根据注册表记录的文件进行一视同仁的CreateProcess
而已。如果你把一个可执行文件 (exe) 扩展名改为 txt,编写代码调用CreateProcess
,传入这个 txt 文件路径,那么 txt 同样也会执行,前提是这个 txt 的二进制本来就是可执行文件。也就是说,扩展名只是决定你双击时外壳程序创建哪个进程以及如何传递参数。对于问题 1,任何扩展名的文件都可以传递给CreateProcess
,但是 Windows 系统对二进制文件的解析有它的格式,如果CreateProcess
传递的二进制文件格式不对,那么当然不能成功创建进程,与扩展名无关。问题 2,前面提到过,exe 和 txt 对系统而言都是一段二进制。但 exe 是被执行的,其内容由系统解析,最终的确是 CPU 执行的。而 txt 只是作为参数传递而已,其内容由 exe 解析。问题 3,打开任何文件,本质上都是创建了个进程,前面提到过。但 txt 并没有被执行,而是被其他的程序解析并呈现出来而已。问题 4、5,如果你想完成这些功能,你可能需要自己在外面包装一层,用进程加参数的方式来实现,或者把要追加的功能以资源的形式载入。Q1:exe文件属于二进制文件,而二进制文件打开是必须要通过响应的软件打开吗?
A1:是的,exe文件的文件格式可以被统称为“可执行文件格式”,无论是windows可执行文件格式,还是unix类系统的可执行文件格式,都有很多种。
Q2:txt属于文本文件。打开文本文件时候只需通过相应软件比如记事本或写字板打开直接输出到显示屏上吗?我的简要意思是文本文件不需要经过cpu编译,然后直接按编码格式输出就可以?
A2:是的,不需要CPU编译(如果你明白CPU编译的含义的话)
Q3:文件是数据和指令的集合,意思打开任何文件都要运行该文件上的指令?
A3:”文件是数据和指令的集合“ 这句话是在有上下文语境下说的,不是、不能指任何文件。
况且, 我说任何文件都只是数据, 这句话也没有错。
Q4:如果我有一个exe文件想追加到txt文件后面,打开txt文件来运行追加到后面的代码,这样可以吗?
A4:不可以,参见Q1的回复部分
Q5:我想实现一个可以把exe文件和txt文件捆绑成一个exe文件,然后打开捆绑后的exe文件运行exe文件和txt文件,请问这个怎么实现?网上有响应的软件,但都是被加了木马的…
A5: 你需要先弄明白运行exe文件的原理和实现, 然后是, 你说的运行txt文件是怎么个事情?
用命令行,
type my.txt >> my.exe
,my.txt
是你的txt文件路径,my.exe
是你的exe文件路径。建议在最后加上txt文件的长度,比如程序代码可以先读最后的4字节,找到txt文件长度,然后从再读txt文件本身,现在你想对txt文本进行任何操作都可以了。注意,这个方法不适用要代码签名的程序。是,是,是,是,是