|
查看: 2756|回复: 34
|
Binary File的疑问
[复制链接]
|
|
|
Binary File,顾名思义,就是non human readable file..
之前老师有说过,因为每一台电脑produce出来的binary code都不同,
所以,java需要把source code 换去class file,再又java runtime enviroment把class file convert去适合那台run 这个application的machine code
.net也一样,需要.netframework才能convert去machine code run,
那为什么我download过某些software installer, 是binary file的呢?
不是说binary file是hardware dependent的吗?
software developer compile成binary file后再让我们download,
我们能开得到吗?
谢谢 |
|
|
|
|
|
|
|
|
|
|
发表于 28-11-2009 05:51 PM
|
显示全部楼层
binary file 未必可执行.
最基本的例子为Notepad 的.txt (text) file 和 Word 的 .doc (binary)file。
不是Unicode/ASCII 通常就是被列为Binary file.
在Windows 里我们可执行的file 都是使用 PE - Portable Executable. PE 格式就是有根据一定的结构编译成机器码(.NET例外除了PE Header内容都是 Common Language Runtime)执行档.
你误解了一点是Java 编出的虽然是Binary file但不是机器码...机器码可让你的处理器直接执行...Java 编出的是Byte Code. Byte Code -> Virtual Machine -> Machine Code |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 28-11-2009 08:32 PM
|
显示全部楼层
原帖由 megablue 于 28-11-2009 05:51 PM 发表 
binary file 未必可执行.
最基本的例子为Notepad 的.txt (text) file 和 Word 的 .doc (binary)file。
不是Unicode/ASCII 通常就是被列为Binary file.
在Windows 里我们可执行的file 都是使用 PE - Portable Ex ...
意思说我把”binary file“和”machine code"弄乱了?
想问的是,binary file是1和0,
machine code也是on 和 off,
有什么不同啊?
还有对了,
想问问exe算是binary file吗?
你说我们download下来的.exe是portable executable,
那么为什么用vb.net写出来的.exe不是portable executable,而是需要.net来execute呢? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 28-11-2009 08:34 PM
|
显示全部楼层
你误解了一点是Java 编出的虽然是Binary file但不是机器码...机器码可让你的处理器直接执行...Java 编出的是Byte Code. Byte Code -> Virtual Machine -> Machine Code
这一句不是很明白哦。。。
是说如果compile成machine code,
直接可以execute..
那么如果我拿到别台电脑的话呢?
是不是不能呢?(machine dependent)
谢啦 |
|
|
|
|
|
|
|
|
|
|
发表于 28-11-2009 08:56 PM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 29-11-2009 01:11 AM
|
显示全部楼层
原帖由 megablue 于 28-11-2009 08:56 PM 发表 
对...你把二进制码和机器码混淆了. 二进制码储存的可以是Text, images..
其实电脑里的所有资料/执行码....最终形式仍然是二进制码...区别是它们的方法只有数据结构.
.NET 需要有.NET Framework - 类似Java Vir ...
exe是binary还是machine code?
还是搞不清楚binary 和machine code的分别,
binary 在数学来说只有1和0
machine code也是。。
有什么分别?
还有,
如果我有一个source file,
我在computer A和comupter B compile出来的machine code回是一样的吗? |
|
|
|
|
|
|
|
|
|
|
发表于 29-11-2009 02:43 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 29-11-2009 03:00 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 29-11-2009 03:04 AM
|
显示全部楼层
[/quote]
只要Compiler和设定一样output出来的exe会是100%相同的
如果是这样,为什么不直接把source code compile成machine code?
直接拿到别的电脑也可以用了。。
而是要把source compile成byte code,
再利用JVM translate去machine code... |
|
|
|
|
|
|
|
|
|
|
发表于 29-11-2009 03:20 AM
|
显示全部楼层
原帖由 1234_4321 于 29-11-2009 03:00 AM 发表 
哇,
你说的这些,都是machine code在cpu怎样行走?
想问
1)那些数据段是在ram里的对吗?
ram储存成多少bit是根据cpu的架构的?
2)你给的例子的cpu架构,是不是和我们现在电脑32bit,64bit一样的?
3 ...
那是概念...
真正的x86架构比我写的还要复杂些
1)对,就在RAM....那x86(就是现在的PC)来说实际上还有registers (在CPU里的记忆体)
2)我给的概念里的CPU是8bit就是每个cycle读8bit 当一个variable 大于8bit就需要分段来读(这是compiler会处理的) 可访问的记忆体地址也不能大于8bit. 同样情形也发生在32/64bitCPU上.
3) 对....如果在 64bit的系统里, 最少会读64bit. 如果认为浪费记忆体的话.. 可以把多组数据encode在一个64bit的variable里..
比如说 a = 1;
b = 1;
c = 3;
d = 1;
encode 后 (hexadecimal value)
0x0001 (a) 0001 (b) 0003 (c) 0001 (d)
当然解读会慢一点点....
现在的CPU和CPU cache 这样快和大....
其实这步骤是有点多余了... |
|
|
|
|
|
|
|
|
|
|
发表于 29-11-2009 03:31 AM
|
显示全部楼层
|
|
|
|
|
|
|
|
|
|
发表于 29-11-2009 10:41 PM
|
显示全部楼层
hardware > os > software
hardware 再怎么不一样, os 一样就好了吧。。 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 29-11-2009 11:32 PM
|
显示全部楼层
原帖由 megablue 于 29-11-2009 03:31 AM 发表 
因为要做到cross platform/cpu ...
直接compile成machine code有些CPU/OS就不会读了....
比如说ARM和x86的machine code 是不一样的...
java virtual machine 就像是翻译人员...
.把byte code翻译成执行者 ...
为什么做不到呢?
我觉得java蛮强的。。
还有,我们的microsoft windows是用什么写出来的呢??
对了,
用vb.net写出来的要用.net才能开。。。
那要怎样写出portable executable的programme出来啊? |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 29-11-2009 11:34 PM
|
显示全部楼层
而且如果你看得懂我想表达什么的话..因该看的出其实binary和machine code本质上是没有分别的...要看的就是你的OS/CPU如何解译那个档案 对...你把二进制码和机器码混淆了. 二进制码储存的可以是Text, images.
这个,我还不是很明白哦。。。
之前你说binary 和machine我混乱了。。
又说本质一样,
我真的乱了  |
|
|
|
|
|
|
|
|
|
|
发表于 30-11-2009 11:36 AM
|
显示全部楼层
所有的file都store in binary form
关键再电脑如何诠义它们
一个exe file , 如果你修改它的binary(例:加一个jpg header上去),电脑就会以jpg方式来开启 |
|
|
|
|
|
|
|
|
|
|
发表于 30-11-2009 11:01 PM
|
显示全部楼层
megablue对low lvl的东西懂蛮多的
可以知道下做IT那一个field的吗? |
|
|
|
|
|
|
|
|
|
|
发表于 1-12-2009 12:59 AM
|
显示全部楼层
原帖由 烛残 于 30-11-2009 11:01 PM 发表 
megablue对low lvl的东西懂蛮多的
可以知道下做IT那一个field的吗?
懂一点皮毛而已..刚刚好够骗吃 
Software design/development. |
|
|
|
|
|
|
|
|
|
|
发表于 1-12-2009 11:00 AM
|
显示全部楼层
回复 14# 1234_4321 的帖子
你可以理解成, 你的 hdd 是一张考卷。
里面有题目序号, 问题, 答案。 如
1) 1 + 1 = ?
2
2) 2 + 2 = ?
4
而你的老师如何分辨 1)是题目序号, 如何分辨 1 + 1 = ? 是问题, 如何分辨 2 是答案呢?
因为上述全部都是数字阿?
在处理器也是一样, binary 只是一种号码形式, 何时该是 address, 何时是 file, 久看你的instruction 是什么。 以后你有机会接触类是 machine architecture 的, 你就会明白了 |
|
|
|
|
|
|
|
|
|
|

楼主 |
发表于 1-12-2009 06:48 PM
|
显示全部楼层
原帖由 onlylonly 于 1-12-2009 11:00 AM 发表 
你可以理解成, 你的 hdd 是一张考卷。
里面有题目序号, 问题, 答案。 如
1) 1 + 1 = ?
2
2) 2 + 2 = ?
4
而你的老师如何分辨 1)是题目序号, 如何分辨 1 + 1 = ? 是问题, 如何分辨 2 ...
也就是说binary file里的binary code,和perform在cpu的machine code是一样的,只是看cpu怎样去诠释它们?
如果一个docx得binary file是“111 000”
那在cpu perform时是不是也一样是"on on on off off off"呢?
还有我的课程没有machine architecture的,看来得自己读了。 |
|
|
|
|
|
|
|
|
|
|
发表于 1-12-2009 09:13 PM
|
显示全部楼层
回复 19# 1234_4321 的帖子
CPU 不会执行docx 里面的binary...因为那根本就不是executable machine instructions. CPU只能执行相应的架构里已经定义的指令(其他的binary对CPU来说只能算是data)。在memory里docx得内容也许可以理解为"on on on off off off" 但对电脑来说那只是两种能分辨的状态. 1 是一种状态 (低电阻).... 0 是另一种状 态(高电阻)... binary 因该是最简化的讯息表达了.
就拿人类的嗓音为例..嗓音(binary) 可以是诗句...可以是指令...可以是歌声...也可以在歌声里骂人...也可以是毫无意义的声音...
[ 本帖最后由 megablue 于 1-12-2009 09:23 PM 编辑 ] |
|
|
|
|
|
|
|
|
| |
本周最热论坛帖子
|