本文目录一览:
- 1、可执行文件是什么
- 2、Unix中可执行程序能不能在Windows中运行?为什么?
- 3、浅析二进制文件与普通文件的区别
- 4、go build和go install的区别是什么?
- 5、BIN文件怎么打开?
- 6、可执行的二进制文件是什么
可执行文件是什么
可执行文件就是由源代码编译后生成的二进制文件。
因为计算机只能识别0和1,所以只有编译成可执行文件才能运行。
进程是一个动态概念,指当前在运行的服务;所以在运行的可执行文件属于进程,没有运行的就不算了。
Unix中可执行程序能不能在Windows中运行?为什么?
不能。
1、可执行的二进制文件包含了机器指令、数据资源、程序运行资源,可执行文件执行之前,操作系统要做一些准备工作,根据不同的操作系统,准备工作是不同的。因此,可执行文件的格式是不相同的,Windows下可执行文件格式为PE格式,linux下可执行文件为elf格式。所以,文件格式的不同导致了可执行文件是不可以直接跨平台使用。-可执行的二进制文件
2、由于不同的操作系统API不同,而一个可执行文件要执行时都需要操作系统的交互才能完成,而不同的操作系统交互操作的方法不同,因此,不同操作系统下的可执行文件不能直接在对方那里直接运行。
扩展资料
UNIX/LINUX 平台下三种主要的可执行文件格式:a.out(assembler and link editor output 汇编器和链接编辑器的输出)、COFF(Common Object File Format 通用对象文件格式)、ELF(Executable and Linking Format 可执行和链接格式)。-可执行的二进制文件
相对可执行文件有三个重要的概念:编译(compile)、连接(link,也可称为链接、联接)、加载(load)。源程序文件被编译成目标文件,多个目标文件被连接成一个最终的可执行文件,可执行文件被加载到内存中运行。-可执行的二进制文件
浅析二进制文件与普通文件的区别
近日,在写一个遍历查找目录文件内容功能时,在使用时功能很正常,确发现了些异常。读取文件时会将一些二进制文件读取出来,搜索目标字符串。本文将详细解析如何正确使用程序区分两种文件(基于c).
文中所指的二进制文件是指可执行文件,或者图片等非文本类型文件,即Binary文件。
首先,为了文件的简单,我们手工生成两个文件,一个普通文件,一个二进制可执行文件
生成普通文件
生成可执行文件a.out
使用grep 查找hello时,两个文件输出为
grep是碰到可执行文件时会输出Binary file
文本文件是一种计算机文件,它是一种典型的顺序文件,其文件的逻辑结构又属于流式文件。(来源百度百科)
本文定义为:文本文件是一种顺序存储了unicode编码,或者其他编码字符的文件。因为不仅可以存英文还可以存放一些表情及换行等其他字符。
将依次遍历文档,然后与所有的可能的编码中的字符进行查找比较,如果所有字符都符合在这些编码字符列表中,则当前文档即为一个文本文档。
不过这种方法的效率堪忧,有没有一种更简单的方法呢。当然有!
当我们使用十六进制的方式打开两个文件,就会发现不同了。同时对比了一张图片的十六进制
图片
在文本文件的十六进制编码同时将 unicode符号也在文本中展示出来了。也可以从文本文件的定义可以得出,非ascii不能作为检测二进制的方法。
但是通过对比三个文件的十六进制编码会发现,可执行文件与图片中包含 了很多00,即空字符,而文本文件中是不存在的。
所以初步结论是不含有空字符的文件即为二进制文件.
但是我们总不能从文件头到尾去判断吧,所以我们查看grep与diff源码会发现一段宏
所以我们取一段数据长度判断,如果是包含了空字符就是非文本类型文件,比如取1024个字节。因为二进制文件一般会有一个文件头,而文件头的数据长度大约128个字节。取1024字节是尽可能的避免头中数据写满。-可执行的二进制文件
当然以上方法只针对于utf-8, asccii ,如果是utf-16或者 utf-32 在数据中也同样会产生空字符
使用grep中同样会将其识别为binary file 所以不向下做研究了。
go build和go install的区别是什么?
go build只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在$GOPATH/pkg)。
go install一般生成静态库文件放在$GOPATH/pkg目录下,文件扩展名a,如果为main包,则会在$GOPATH/bin 生成一个可执行的二进制文件。
go build
通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。
$ go build hello.go
$ lshello hello.go
当然我们也 可以通过-o选项来指定其他名字:
$ go build -o mygo hello.go
$ lsmygo hello.go
如果我们在go-examples目录下直接执行go build命令,后面不带文件名,我们将得到一个与目录名同名的可执行文件:
$ go build
$ lsgo-examples hello.go
go install
与build命令相比,install命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。
1、go install编译出的可执行文件以其所在目录名(DIR)命名
2、go install将可执行文件安装到与src同级别的bin目录下,bin目录由go install自动创建
3、go install将可执行文件依赖的各种package编译后,放在与src同级别的pkg目录下
BIN文件怎么打开?
如果是光盘镜像文件,可以使用UltraISO之类的软件打开,也可以转换为ISO格式,或加载到虚拟光驱里,当光盘使用。
BIN文件是一种二进制文件,通过虚拟光驱软件是可以打开BIN文件的,也有用户将系统备份为BIN文件,便于下次重装系统时进行读取。
二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚拟光驱文件。-可执行的二进制文件
一般来讲是机器代码,汇编语言编译后的结果(磁盘操作系统下汇编语言编译后与".com"文件相类似),用debug、WINHEX,U_EDIT等软件可以打开(通常不一定能看得懂是些什么除非学习过汇编语言)。这类 所有的文件,无论后缀名是什么,一律分为两种格式".text" 和".binary"。-可执行的二进制文件
可执行的二进制文件是什么
简单来说,文本文件是基于字符编码的文件,常见的编码有ASCII编码,UNICOD
E编码等等。二进制文件是基于值编码的文件,你可以根据具体应用,指定某个值是什么
意思(这样一个过程,可以看作是自定义编码)。
从上面可以看出文本文件基本上是定长编码的,基于字符嘛,每个字符在具体编
码中是固定的,ASCII码是8个比特的编码,UNICODE一般占16个比特。而二进制文件可看
成是变长编码的,因为是值编码嘛,多少个比特代表一个值,完全由你决定。大家可能
对BMP文件比较熟悉,就拿它举例子吧,其头部是较为固定长度的文件头畔ⅲ?字节
用来记录文件为BMP格式,接下来的8个字节用来记录文件长度,再接下来的4字节用来记
录bmp文件头的长度。。。大家可以看出来了吧,其编码是基于值的(不定长的,2、4、
8字节长的值都有),所以BMP是二进制文件。