作者回复: Java是通过实现不同平台上的虚拟机,然后即时翻译javac生成的中间代码来做到跨平台的。跨平台的工作被虚拟机开发人员来解决了
作者回复: 可以这样理解。实际机器启动加电的时候是从BIOS去读取MBR,再加载操作系统等等。
PE和ELF是在操作系统加载之后的事情了。
作者回复: 一步同学你好,当然,因为很多程序还依赖各种操作系统本身提供的动态链接库,系统调用等等。需要wine提供对应的实现,兼容格式只是万里长征第一步。
作者回复: 简单地说,可以认为是在汇编之后变成了机器码放在了elf的代码段里。
作者回复: 如果是编译型的语言都是这样的。
也有通过解释器,或者虚拟机,转换成实际的机器码指令执行的。
作者回复: 除了系统调用,还要考虑是否有动态链接库的依赖等等
作者回复: 👍这本书对于做系统开发的同学是必读书目之一。
作者回复: 没错,不过其实你不加入对应的申明编译和运行也是能执行的,但是会有编译器的告警。
作者回复: 如果不是pe格式也不是elf格式,就不能执行啊。能执行是因为实际执行的不是你的程序。比如你写了一段python代码,实际执行的是python解释器,而不是你的py代码
作者回复: 闫循鸣同学你好,关于这一部分,可以看下一讲的程序加载
作者回复: 👍程序员的自我修养是一本好书。这个专栏的主题是组成原理,希望能带大家入个门。更深入地要去再花时间看书哦
作者回复: 👍希望对大家有所帮助
作者回复: 程序水果宝同学,
objdump命令并不是从6b0开始,只是add函数的text section从6b0开始而已。你可以自己试着在本地dump出来看一下。
ELF格式的文件有很多section,也有header部分,里面的地址本质上是一个相对的偏移量。想要对ELF格式做更深入的研究,推荐可以先花点时间看完《程序员的自我修养》这本书。
作者回复: gogo同学,
你好,-t是符号表。--weak-bind 就是弱绑定,应用场景是可以为一些函数库提供默认实现,但是用弱绑定,然后在链接的时候,替换成别的实现。