- 1、本文档共5页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二进制文件及文本文件的详细以及如何生成二进制文件
二进制文件和文本文件的详细以及如何生成二进制文件?
HYPERLINK /blog/ \l m=0t=1c=fks_087070081082080064087084083095085084082070081080084070081 \o 技术随笔 技术随笔 2010-05-01 19:13:56 阅读226 评论0 ??字号:大中小?订阅
?? ?这个问题一直困扰了很多年,可能是我没有认真的去思考。我相信很多人可能和我一样很纠葛,到底编译器也好,汇编器也好是如何工作的呢?到底怎么回事?为什么会运行呢?这是让我们这些看着windows学习电脑的人真的很难去理解计算机的内部结构。其实,这一切都只是障眼法,下面我就来给大家细细说说我对计算机的理解。
?? ?解答1:编译器是怎么回事?
?? 所谓编译器,顾名思义就是将一种文本格式转换成另一种文本格式。比如将字符串 echo hello; 转换成 printf(hello); 这其实是php语言转成c语言的一种表示。这只是一种简单的描述,其实很大一部分的编译器是将源语言转换成了汇编语言。下面我们来看看 C 语言中的经典 hello word,通过gcc编译后生成的汇编是怎么回事。
?? c语言源码:
??#includestdio.h
?int main() {
?? ?printf(hello world\n);
}
通过编译器后,编译器把这个翻译成了另一套字符串,其实就是汇编语言:
.file hello.c
.section .rodata
.LC0:
.string hello world
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16,%esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $4, %esp
movl $.LC0, (%esp)
call puts
addl $4, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident GCC: (GNU) 4.1.2
.section .note.GNU-stack,, @progbits
?? ? ? 这就是编译器做的工作了,其实这应该可以理解是吗,其实就是从一种字符串模式到了另一种字符串模式。但是很多人一定和我一样在思考,字符串模式的转变我会,但是从字符串转到二进制如何转???其实我们的大脑真的被这些东西所迷惑了,都错了,字符串是什么?字符串其实也是二进制啊,只不过字符串它不能执行而已。当我们查看字符串的16进制的时候,其实和二进制的16进制一样,只是我们人为的给字符串赋予了一个abcde...这样的一层显示方式。而二进制码之所以没有这层皮,是因为他有了另一层含义。汇编器其实和编译器做的动作是一样的。只是抽象的层次不同。这里有点绕是吗?其实不绕。当我们编译的时候,我们发现了文本文件要比可执行文件小很多,文本文件比汇编文件小6.5倍。而比二进制要小70倍左右,也就是说一个60字节的文本文件编译成汇编是400个字节左右,再生成二进制大概是4k左右了。
???
??? ?那这到底说明了什么呢?
???? 其实是这样的,所谓的二进制其实和我们一般说的 ASCII 中的FF,0F是一样的,只不过二进制符合的不是ASCII的这套显示或者作用标准,它采用的是计算机cpu的处理标准。比如 \x41 在ASCII中表示的是A,而到了计算机cpu那里他可能是另一个意思,
那么你又会觉得奇怪,那么为什么文本可以显示,而二进制却不能呢?因为文本文件是通过文本文件查看器去重新给文本文件进行处理然后显示的,并不是我们想当然的直接打开就能看见,至少也要通过notepad吧?!而二进制进行运行,则是不通过其他软件的,直接丢给cpu的(当然,你也可以用notepad打开二进制文件,只不过显示的是杂乱的ASCII字符和控制符)。有些人又会问了,错了吧,windows的二进制丢到linux下能用吗?其实这不是错,windows的二进制丢到linux下之所以不能运行,并不是二进制本身的问题,而是因为linux里没有windows的库,二进制文件运行的时候缺少必要的库才无法运行。所谓的库,其实就是调用系统资源或者本身就是系统资源的一种程序包(比如显示,接受键盘,窗口啊,等等等等)。和二进制代码有关的唯一的一方面其实就是cpu。因为不同的cpu处理的二进制的指令是有区别的。
??? 其实,说穿了,所谓的计算机软件,就是对计算机硬件的一次次的抽象,让它更接近于人类的思考方式和使用习惯。这
您可能关注的文档
- 扫盲识字教案(1].doc
- 报关实务复习资料(1].doc
- 护理三基试题及答案(1].doc
- 我的英语学习之路(1].doc
- 中国近代文化史论文 [2).doc
- 推断题2 (2].doc
- 拼音拼读和练习题(1].doc
- 提取关键词教案(上课用].doc
- 接触网工安规题库(4级].doc
- 按比例分配应用题 (2].doc
- (二年级数学教案)《轴对称图形》教学案例设计(课标版,3篇) .pdf
- 2024-2025学年统编版语文七年级(上)第一次月考模拟试卷精选 .pdf
- 【可行性报告】2023年电缆连接件行业项目可行性分析报告 .pdf
- 2011年上海市高中学业水平考试《信息科技》试卷二 .pdf
- 公车管理方案[全文5篇] .pdf
- (2021年整理)北师大版七年级数学上册期末试卷及答案 .pdf
- 一年级上册美术教学设计-第4课各种各样的形-在美术世界里遨游▏人美版.pdf
- 2024-2025学年湖南九年级语文上学期第一次月考卷.(有答案)docx.pdf
- tm1812芯片说明 _原创文档.pdf
- 共同投资合作协议书范本(8篇) .pdf
文档评论(0)