为什么Lua虚拟机指令的格式是BCAop而不是CBAop?

本文解析了Lua虚拟机指令数据格式BCAop的设计原因,介绍了为何选择此格式而非CBAop,并探讨了该设计对某些CPU性能的影响及其实现上的中立性。

lua的虚拟机指令数据是长度为32位(unsigned int或unsigned long)。其中低6位是操作码,接下来8位是参数A,紧接着是9位的参数C,最后是9位的参数B。
那它的格式是BCAop。为什么不是CBAop呢?按字母顺序命名不好吗?
lua的作者roberto是这样解释的:http://lua-users.org/lists/lua-l/2015-05/msg00491.html
下面摘自roberto的回复。

The original order (when we adopted ABC) was ABCOp (from higher to lower bits). Later, we changed it to BCAOp. (So, the current order gives the impression that B and C exchanged places, but it was A who changed.) The reason was only to try to keep the most used fields in the lower bits (because some CPUS take slighly longer to make shifts with larger offsets). So, as A is more used than B or C, we moved it to a lower position.
I think currently few CPUs have this issue, and probably I do not have access to any of them anyway, so I did not bother to measure. But note that the change in our case was completely neutral in any other aspect (the code is neither more complicated, nor larger, nor anything at all). So, with all other things being completely equal, why not to choose the option that may give you (even with a very low probability) a slight advantage?
(If I knew I would have to justify the change, I probably would not have done it, since just the job of explaining it is enough to offset those frail gains :-)

  大家以为是B和C换位置,其实是A和BC换位置了。按作者的说法,是因为想把最常用的数据放在低位,这样某些cpu在做一些位移操作时可以快一点,op和A是最常用的,所以就有了这样一个顺序。
  但是其实再把B和C的位置换一换也是可以的啊,C和B两个参数应该是一样的,没有谁更常用一些吧。
可能是因为BC一般被看成是一个整体,所以就变这样了。
  如果你喜欢,改一下lua的源码也是可以搞成CBAop这种格式的,而且对效率也没什么很大的影响,基本可以忽略。
作者不也说了嘛:修改这个顺序所带来的回报早就被向大家解释这个顺序所作出的付出抵消了:)

内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置与长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式与逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取与解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维与验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析与算法验证,深入理解每一步的推理依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值