作者回复: Java是通过实现不同平台上的虚拟机,然后即时翻译javac生成的中间代码来做到跨平台的。跨平台的工作被虚拟机开发人员来解决了
作者回复: 可以这样理解。实际机器启动加电的时候是从BIOS去读取MBR,再加载操作系统等等。
PE和ELF是在操作系统加载之后的事情了。
作者回复: 简单地说,可以认为是在汇编之后变成了机器码放在了elf的代码段里。
作者回复: 如果是编译型的语言都是这样的。
也有通过解释器,或者虚拟机,转换成实际的机器码指令执行的。
作者回复: 一步同学你好,当然,因为很多程序还依赖各种操作系统本身提供的动态链接库,系统调用等等。需要wine提供对应的实现,兼容格式只是万里长征第一步。
作者回复: 除了系统调用,还要考虑是否有动态链接库的依赖等等
作者回复: 没错,不过其实你不加入对应的申明编译和运行也是能执行的,但是会有编译器的告警。
作者回复: 如果不是pe格式也不是elf格式,就不能执行啊。能执行是因为实际执行的不是你的程序。比如你写了一段python代码,实际执行的是python解释器,而不是你的py代码
作者回复: 👍这本书对于做系统开发的同学是必读书目之一。
作者回复: 👍程序员的自我修养是一本好书。这个专栏的主题是组成原理,希望能带大家入个门。更深入地要去再花时间看书哦
作者回复: 闫循鸣同学你好,关于这一部分,可以看下一讲的程序加载
作者回复: 👍希望对大家有所帮助
作者回复: 盗马将同学,你好
6b1你可以认为是一个行号,也就是这条指令的内存地址
48 89 e5 是指这条指令的二进制表示,用16进制的方式书写出来。毕竟写一堆0和1太占地方了。
作者回复: 袭同学你好,
这个看到后面的程序装载和动态链接部分应该就明白了。
作者回复: skye同学,
你好,据我所知是没有。这个硬件上的指令集差异避不开啊。