java 解析 elf 包,字节码如Java字节码和文件以及ELF等机器代码可执行文件有什么区别?...

在编译成机器代码之前,字节代码是注意到的中间步骤.因为最后一步是加载时间(通常是运行时,就像即时(JIT)编译的情况一样,字节代码是独立于架构的:运行时(.net的CLR或Java的JVM)负责将字节代码操作码映射到其底层机器代码表示.

相比之下,本机代码(Windows:PE,PE32,OS X / iOS:Mach-O,Linux / Android /等:ELF)是编译代码,适用于特定架构(Android / iOS:ARM,大多数:Intel 32 -bit(i386)或64位).这些都非常相似,但仍然需要部分(或者,用Mach-O说法“加载命令”)来设置可执行文件的内存结构,因为它变成了一个进程(旧的DOS支持“.com”格式,这是一个原始记忆图像).在上述所有内容中,您可以大致说出以下内容:

>带有“.”的部分由编译器创建,并且是“默认”或预期具有默认行为

>可执行文件具有主代码部分,通常称为“text”或“.text”.这是本机代码,可以在特定体系结构上运行

>字符串存储在单独的部分中.它们用于硬编码输出(打印出来的内容)以及符号名称.

>符号 – 链接器用于将可执行文件与其库(Windows:DLL,Linux / Android:共享对象,OS X / iOS:.dylib或框架)放在一起的内容存储在单独的部分中.通常还有一个“PLT”(过程链接表),它使编译器能够简单地将存根添加到您调用的函数(printf,open等),链接器可以在可执行文件加载时连接.

>导入表(在Windows中说明..在ELF中这是一个DYNAMIC部分,在OS X中这是一个LC_LOAD_LIBRARY命令)用于声明其他库.如果在加载可执行文件时找不到那些,则加载失败,您无法运行它.

>导出表(对于libraries / dylibs / etc)是库(或在Windows中,甚至是.exe)可以导出以便与其他人链接的符号.

>常量通常在您看到的“.rodata”中.

希望这可以帮助.真的,你的问题很模糊..

TG

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值