Q1:
exe文件属于二进制文件,而二进制文件打开是必须要通过响应的软件打开吗?
Q2:
txt属于文本文件。打开文本文件时候只需通过相应软件比如记事本或写字板打开直接输出到显示屏上吗?我的简要意思是文本文件不需要经过cpu编译,然后直接按编码格式输出就可以?
Q3:
文件是数据和指令的集合,意思打开任何文件都要运行该文件上的指令?
Q4:
如果我有一个exe文件想追加到txt文件后面,打开txt文件来运行追加到后面的代码,这样可以吗?
Q5:
我想实现一个可以把exe文件和txt文件捆绑成一个exe文件,然后打开捆绑后的exe文件运行exe文件和txt文件,请问这个怎么实现?网上有响应的软件,但都是被加了木马的…
最后,感谢回答,谢谢。
我就不一一解答了,概括起来讲解一下。在 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,如果你想完成这些功能,你可能需要自己在外面包装一层,用进程加参数的方式来实现,或者把要追加的功能以资源的形式载入。