java之七篇:为何java可反编译

的确java的编译类文件可反编译,市面上可见到java的反编译具jad等;类似工具POwerbuider编译的也可被反编译。 哎,编译成伪代码虚拟机解释执行的都有这个通病,这的确是个窘地。 无可,为何?继续后文诠释一二…。
1)解释执行的虚拟机运算执行基于栈、离不开栈,基于栈运行都会留下蛛丝马迹;java编译字节码是基于栈操的,啥入栈、出栈、操作数、操作码都孕育其中,如是表达式这些编译后肯定是后缀表达式的计算逻辑哈
2)静态区、符号表、常量区、本地变量不是解释性这类语言独有的,可执行文件也有,有的叫法不同而已;哪为何要有呢,其一、各相关连接、解释、回填地址等;其二、资源有限共享等;其三、方便调试跟踪等、如运行期异常那得通知用户原代码那行报错呀 ,当然还有一二三…
3)栈是英雄,其上跑的方法或函数,栈上的操作数可概括为常量、局部变量(注意是基本类型的按值传递、如对象则是对象地址值复制后的地址值传递,再者各局部变量都有编号,这个编号是编译期确定的)、静态变量按值传递(当然还有对象的地址值复制传递); 方法的参数类型、参数个数也很好推算出来;
4)编译后字节码有个重要的行表,加上前面提到的栈上后缀表达式,加上分析收集的指令代码、及操作数类型就能读懂这个代码了 ,对应翻转为中缀表达式;
5)人工虽能读懂二进制也瓜了点,还是写段代码翻译为中缀,符号表也在、操作数也分析到位;思路清晰,这样的反编译工具就出来了 再试测改进工具。
6)哪咋防反编译呢,只有将静态区、常量区、符号表等地方的东东部分抹掉、替换名字了,或运行流程控制吧了;最终反编译后的代码就不易阅读,看不懂了; 哎呀,中午了我也该吃午饭了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值