



免费预览已结束
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本文由b e i k e x i a m i 贡献 d o c 1 使用 j a v a s s i s t 修改 c l a s s 文件 Fi r e s t o r m 是一个用 JAVA 写的代码生成工具 可以替你节省很多的代码量 可 以说同类软件中功能最强 的一个 Fi r e s t o r m 是一个用 JAVA 写的代码生成工具 可以替你节省很多的代码量 可以说同类软件中功能最强 的一个 你可以在网上下 载到最新的 2 3 试用版本 同时网站会发给你一个试用的 l i c e n s e 文件 既然是试 用 那么在使用上肯定有一定的限制 主要限制有 3 个 1 只能最多生成 5 张表 的 DAO 2 有时间限制 3 不能自己定制代码生成 为了能够更好的试用这个软件 我得改改它 去掉这些限制 将 f i r e s t o r m j a r 打开后 可以看到它使用 了 混淆 器进行代码保护 不同于大多数的混淆器生成的文件 它的 c l a s s 和 p a c k a g e 大 部分都是以关键字来 命名 所以如果你用 JAD 之类的工具把它反编译后是不能再把 它编译成功 编译器会提示出错误 反编译后 找到几个有关注册的关键文件 发现 它使用的是数字签名技术来做的保护 所以想逆向找出 注册码的计算方法是不可行的 了 只能通过修改文件的方法来破解 通常我们是先反编译 然后再修改 反编译后生 成的原文件 最后再重新编译 但是由于文件名和包名的关系我们无法进行编译 除 非把它的 这些 非法 的文件名和包名全部改成符合 j a v a 语言规范的名称 由于类 包众多 互相调用也很 频繁 所以这种方法几乎不可能的 另外一种方法就是使 用 s o f t i c e 之类的调试软件来破解 不过这个脱离 JAVA 的范畴 这里不做讨论 还有一种方法可能很少有人用 就是先反编译得到原文件 然后找到关键的方法后修 改它的字节码 也就是 c l a s s 文件 这中方法往往需要你知道一些有关 CLASS 文件 格式方面的知识 如果没有也不用担 心 有许多的处理字节码的工具可以帮助你 比较流行的这类工具主要有 a p a c h e o r g 的 BCEL j b o s s c o m 的 j a v a s s i s t o b j e c t w e b o r g 的 a s m 都是出身名门哈 这 3 个工具各有特点 这次我选用 j a v a s s i s t 因为它修改 c l a s s 文件最方便 甚至不需要懂得字节码和 c l a s s 文件格式 让我们来看看具体步骤 s t e p 1 下载并安装 FIRESTORM s t e p 2 反编译 j a r 文件 阅读代码 找到关 键的方法 当然 我这里写出来 你就不用再麻烦了 其实这步 是最 麻烦的 找到 c o m c o d e f u t u r e s i f i f 文件中的方法 p u b l i c s t a t i c b o o l e a n a j a v a s e c u r i t y Pu b l i c Ke y p u b l i c k e y b y t e a b y t e 0 b y t e a b y t e 1 t h r o w s j a v a s e c u r i t y No Su c h Al g o r i t h m Ex c e p t i o n j a v a s e c u r i t y No Su c h Pr o v i d e r Ex c e p t i o n j a v a s e c u r i t y In v a l i d Ke y Ex c e p t i o n j a v a s e c u r i t y Si g n a t u r e Ex c e p t i o n j a v a s e c u r i t y Si g n a t u r e j a v a s e c u r i t y Si g n a t u r e g e t In s t a n c e SHA1w i t h DSA SUN s i g n a t u r e i n i t Ve r i f y p u b l i c k e y s i g n a t u r e u p d a t e a b y t e 0 r e t u r n s i g n a t u r e v e r i f y a b y t e 1 这 个方法是对公钥进行检验 修改的思路就是直接让他返回一个 t r u e s i g n a t u r e s t e p 2 收到 f i r e s t o r m l i c e n s e 文件后不要急着安装 先修改如下 n o 改为 y e s 5 改为 n o n e 日期 改为 n e v e r 修改后放到 f i r e s t o r m 的安装路径的 l i c e n s e 目录 s t e p 3 修改 c o m c o d e f u t u r e s i f i f 的 c l a s s 文件 这里我们需要写一个小程 序来完成实现 i m p o r t j a v a s s i s t Cl a s s Po o l i m p o r t j a v a s s i s t Ct Cl a s s i m p o r t j a v a s s i s t Ct Me t h o d p u b l i c c l a s s Te s t p u b l i c s t a t i c v o i d m a i n St r i n g a r g s t h r o w s Ex c e p t i o n Cl a s s Po o l p o o l Cl a s s Po o l g e t De f a u l t 设置目标类的路径 确保 能够找到需要修改的类 这里我指向 f i r e s t o r m j a r 解包后的路径 p o o l i n s e r t Cl a s s Pa t h d w o r k f i r e s t o r m f i r e s t o r m 获得要修改的类 Ct Cl a s s c c p o o l g e t c o m c o d e f u t u r e s i f i f 设置方法需要的参数 Ct Cl a s s p a r a m n e w Ct Cl a s s 3 p a r a m 0 p o o l g e t j a v a s e c u r i t y Pu b l i c Ke y p a r a m 1 p o o l g e t b y t e p a r a m 2 p o o l g e t b y t e 得 到方法 Ct Me t h o d m c c g e t De c l a r e d Me t h o d a p a r a m 插入新的代码 m i n s p a g e 1 e r t Be f o r e r e t u r n t r u e 保存到文件里 c c w r i t e Fi l e 修改完后 你可以反编译修改过的的 c l a s s 文件 看看代码是否加入成功 s t e p 4 将所有的 c l a s s 文件重新打包成 f i r e s t o r m j a r 然后替换 f i r e s t o r m 安装路径 l i b f i r e s t o r m j a r 再启动 f i r e s t o r m 即可 一 直接修改字节码 要查看 r e t u r n f a l s e 对应字节码需要使用 JCl a s s Li b 工具 JCl a s s Li b 有一个可视 化的界面 方便我们查看类的变量 方法 静态数据 等 如下图 这个 a 方法 也许实际名称就是 s e n d s m s 的字节码如下 0 a l o a d 0 1 i n v o k e s t a t i c 42 4 c h e c k c a s t 11 7 d u p 8 a s t o r e 2 9 l d c 61 11 i n v o k e i n t e r f a c e 48 c o u n t 2 16 c h e c k c a s t 12 19 a s t o r e 3 20 a l o a d 2 21 i n v o k e s t a t i c 29 24 i f n e 34 10 27 a l o a d 3 28 i n v o k e s t a t i c 29 31 i f e q 36 5 34 i c o n s t 0 35 i r e t u r n 36 a l o a d 3 37 a l o a d 0 38 i n v o k e i n t e r f a c e 50 c o u n t 2 43 a l o a d 3 44 a l o a d 1 45 i n v o k e i n t e r f a c e 5 1 c o u n t 2 50 a l o a d 2 51 a l o a d 3 52 i n v o k e i n t e r f a c e 49 c o u n t 2 57 a l o a d 2 58 i n v o k e i n t e r f a c e 47 c o u n t 1 63 i c o n s t 1 64 i r e t u r n 65 p o p 66 i c o n s t 0 67 i r e t u r n 通过查找 JVM 指令集 0 x 03 i c o n s t 0 i n t 型 1 推送至栈顶 0 x a c i r e t u r n 的 将 i n t 型 0 推送至栈顶 0 x 04 i c o n s t 1 将 从当前方法返回 i n t 很明显 63 67 行就是对应 r e t u r n t r u e JVM INSTR p o p r e t u r n f a l s e 这 5 行对应的 16 进制值是 0 x 04 0 x AC 0 x 57 0 x 03 0 x AC 于是 16 进制编辑器打开 用 查找 04AC5703AC 的 位置 果然不负众望 接下来你知道怎么做了吧 把 0 x 03 这个位置的值 换成 0 x 04 那么这个 r e t u r n f a l s e 不就变成 r e t u r n t r u e 了 呵呵 JVM 指令集及各指令的详细使用说明 1 指令码 助记符 2 0 x 00 n o p 说明 什么都不做 将 i n t 型 1 推送至栈顶 将 i n t 型 0 推送至栈顶 将 i n t 型 1 推送至栈顶 将 i n t 型 2 推送至栈顶 将 i n t 型 3 推送至栈顶 将 i n t 型 4 推送至栈顶 将 i n t 型 5 推送至栈顶 将 l o n g 型 0 推送至栈顶 将 l o n g 型 1 推送至栈顶 将 f l o a t 型 0 推送至栈顶 将 f l o a t 型 1 推送至栈顶 将 f l o a t 型 2 推送至栈顶 将 d o u b l e 型 0 推送至栈顶 将 d o u b l e 型 1 推送至栈顶 将单字节的常量值 128 127 推送至栈顶 将一个短整型常量值 327 68 32767 推送至栈顶 将 i n t f l o a t 或 St r i n g 型常量值从常量池中推送至栈顶 将 i n t f l o a t 或 St r i n g 型常量值从常量池中推送至栈顶 宽索引 将 l o n g 或 d o u b l e 型常量值从常量池中推送至栈顶 宽索引 将指定的 i n t 型本地变量推送至栈 顶 将指定的 l o n g 型本地变量推送至栈顶 将指定的 f l o a t 型本地变量推送至栈顶 将指定的 d o u b l e 型本地变量推送至栈顶 将指定的引用类型本地变量推送至栈顶 将 第一个 i n t 型本地变量推送至栈顶 将第二个 i n t 型本地变量推送至栈顶 将第三个 i n t 型本地变量推送至栈顶 3 0 x 01 a c o n s t n u l l 将 n u l l 推送至栈顶 4 0 x 02 i c o n s t m 1 5 0 x 03 i c o n s t 0 6 0 x 04 i c o n s t 1 7 0 x 05 i c o n s t 2 8 0 x 06 i c o n s t 3 9 0 x 07 i c o n s t 4 1 0 0 x 08 i c o n s t 5 11 0 x 09 l c o n s t 0 12 0 x 0a l c o n s t 1 13 0 x 0b f c o n s t 0 14 0 x 0c f c o n s t 1 15 0 x 0d f c o n s t 2 16 0 x 0e d c o n s t 0 17 0 x 0f d c o n s t 1 18 0 x 10 b i p u s h 19 0 x 11 s i p u s h 20 0 x 12 l d c 21 0 x 13 l d c w 22 0 x 14 l d c 2 w 23 0 x 15 i l o a d 24 0 x 16 l l o a d 25 0 x 17 f l o a d 26 0 x 18 d l o a d 27 0 x 19 a l o a d 28 0 x 1a i l o a d 0 29 0 x 1b i l o a d 1 30 0 x 1c i l o a d 2 31 0 x 1d i l o a d 3 32 0 x 1e l l o a d 0 33 0 x 1f l l o a d 1 34 0 x 20 l l o a d 2 3 5 0 x 21 l l o a d 3 36 0 x 22 f l o a d 0 37 0 x 23 f l o a d 1 38 0 x 24 f l o a d 2 39 0 x 2 5 f l o a d 3 40 0 x 26 d l o a d 0 41 0 x 27 d l o a d 1 42 0 x 28 d l o a d 2 43 0 x 29 d l o a d 3 44 0 x 2a a l o a d 0 45 0 x 2b a l o a d 1 46 0 x 2c a l o a d 2 47 0 x 2d a l o a d 3 48 p a g e 2 0 x 2e i a l o a d 49 0 x 2f l a l o a d 50 0 x 30 f a l o a d 51 0 x 31 d a l o a d 52 0 x 32 a a l o a d 53 0 x 33 b a l o a d 54 0 x 34 c a l o a d 55 0 x 35 s a l o a d 56 0 x 36 i s t o r e 57 0 x 37 l s t o r e 58 0 x 38 f s t o r e 59 0 x 39 d s t o r e 60 0 x 3a a s t o r e 61 0 x 3b i s t o r e 0 62 0 x 3c i s t o r e 1 63 0 x 3d i s t o r e 2 64 0 x 3e i s t o r e 3 65 0 x 3f l s t o r e 0 66 0 x 40 l s t o r e 1 67 0 x 41 l s t o r e 2 68 0 x 42 l s t o r e 3 69 0 x 43 f s t o r e 0 70 0 x 44 f s t o r e 1 71 0 x 45 f s t o r e 2 72 0 x 46 f s t o r e 3 73 0 x 47 d s t o r e 0 74 0 x 48 d s t o r e 1 将第四个 i n t 型本地变量推送至栈顶 将第一个 l o n g 型本地变量推送至栈顶 将第二个 l o n g 型本地变量推送至栈顶 将第三个 l o n g 型本地变量推送至栈顶 将第 四个 l o n g 型本地变量推送至栈顶 将第一个 f l o a t 型本地变量推送至栈顶 将第二个 f l o a t 型本地变量推送至栈顶 将第三个 f l o a t 型本地变量推送至栈顶 将第四个 f l o a t 型本地变量推送至栈顶 将第一个 d o u b l e 型本地变量推送至栈顶 将第二个 d o u b l e 型本地变量推送至栈顶 将第三个 d o u b l e 型本地变量推送至栈顶 将第四个 d o u b l e 型本地变量推送至栈顶 将第一个引用类型本地变量推送至栈顶 将第二个引用类 型本地变量推送至栈顶 将第三个引用类型本地变量推送至栈顶 将第四个引用类型本 地变量推送至栈顶 将 i n t 型数组指定索引的值推送至栈顶 将 l o n g 型数组指定索引 的值推送至栈顶 将 f l o a t 型数组指定索引的值推送至栈顶 将 d o u b l e 型数组指定索 引的值推送至栈顶 将引用型数组指定索引的值推送至栈顶 将 b o o l e a n 或 b y t e 型数 组指定索引的值推送至栈顶 将 c h a r 型数组指定索引的值推送至栈顶 将 s h o r t 型数 组指定索引的值推送至栈顶 将栈顶 i n t 型数值存入指定本地变量 将栈顶 l o n g 型数 值存入指定本地变量 将栈顶 f l o a t 型数值存入指定本地变量 将栈顶 d o u b l e 型数值 存入指定本地变量 将栈顶引用型数值存入指定本地变量 将栈顶 i n t 型数值存入第一 个本地变量 将栈顶 i n t 型数值存入第二个本地变量 将栈顶 i n t 型数值存入第三个 本地变量 将栈顶 i n t 型数值存入第四个本地变量 将栈顶 l o n g 型数值存入第一个本 地变量 将栈顶 l o n g 型数值存入第二个本地变量 将栈顶 l o n g 型数值存入第三个本 地变量 将栈顶 l o n g 型数值存入第四个本地变量 将栈顶 f l o a t 型数值存入第一个本 地变量 将栈顶 f l o a t 型数值存入第二个本地变量 将栈顶 f l o a t 型数值存入第三个 本地变量 将栈顶 f l o a t 型数值存入第四个本地变量 将栈顶 d o u b l e 型数值存入第一 个本地变量 将栈顶 d o u b l e 型数值存入第二个本地变量 75 0 x 49 d s t o r e 2 76 0 x 4a d s t o r e 3 77 0 x 4b a s t o r e 0 78 0 x 4c a s t o r e 1 79 0 x 4d a s t o r e 2 80 0 x 4e a s t o r e 3 81 0 x 4f i a s t o r e 82 0 x 50 l a s t o r e 8 3 0 x 51 f a s t o r e 84 0 x 52 d a s t o r e 85 0 x 53 a a s t o r e 86 0 x 54 b a s t o r e 87 0 x 5 5 c a s t o r e 88 0 x 56 s a s t o r e 89 0 x 57 p o p 90 0 x 58 p o p 2 91 0 x 59 d u p 92 0 x 5 a d u p x 1 93 0 x 5b d u p x 2 94 0 x 5c d u p 2 顶 95 0 x 5d d u p 2 x 1 96 0 x 5e d u p 2 x 2 97 0 x 5f s w a p 98 0 x 60 i a d d 99 0 x 61 l a d d 100 0 x 62 f a d d 101 0 x 63 d a d d 102 0 x 64 i s u b 103 0 x 65 l s u b 104 0 x 66 f s u b 105 0 x 67 d s u b 106 0 x 68 i m u l 107 0 x 69 l m u l 108 0 x 6a f m u l 109 0 x 6b d m u l 110 0 x 6c i d i v 111 0 x 6d l d i v 112 0 x 6e f d i v 113 0 x 6f d d i v 114 0 x 70 i r e m 115 0 x 71 l r e m 116 0 x 72 f r e m 117 0 x 73 d r e m 将栈顶 d o u b l e 型数值存入第三个本地变量 将栈顶 d o u b l e 型数值存入第四个 本地变量 将栈顶引用型数值存入第一个本地变量 将栈顶引用型数值存入第二个本地 变量 将栈顶引用型数值存入第三个本地变量 将栈顶引用型数值存入第四个本地变量 将栈顶 i n t 型数值存入指定数组的指定索引位置 将栈顶 l o n g 型数值存入指定数组 的指定索引位置 将栈顶 f l o a t 型数值存入指定数组的指定索引位置 将栈顶 d o u b l e 型数值存入指定数组的指定索引位置 将栈顶引用型数值存入指定数组的指定索引位 置 将栈顶 b o o l e a n 或 b y t e 型数值存入指定数组的指定索引位置 将栈顶 c h a r 型数 值存入指定数组的指定索引位置 将栈顶 s h o r t 型数值存入指定数组的指定索引位置 将栈顶数值弹出 数值不能是 l o n g 或 d o u b l e 类型的 将栈顶的一个 l o n g 或 d o u b l e 类型的 或两个数值弹出 其它 复制栈顶数值并将复制值压入栈顶 复制栈顶 数值并将两个复制值压入栈顶 复制栈顶数值并将三个 或两个 复制值压入栈顶 复 制栈顶一个 l o n g 或 d o u b l e 类型的 或两个 其它 数值并将复制值压入栈 将栈最顶端的两个数值互换 数值不能是 l o n g 或 d o u b l e p a g e 3 类型的 将栈顶两 i n t 型数值相加并将结果压入栈顶 将栈顶两 l o n g 型数值相加并 将结果压入栈顶 将栈顶两 f l o a t 型数值相加并将结果压入栈顶 将栈顶两 d o u b l e 型 数值相加并将结果压入栈顶 将栈顶两 i n t 型数值相减并将结果压入栈顶 将栈顶两 l o n g 型数值相减并将结果压入栈顶 将栈顶两 f l o a t 型数值相减并将结果压入栈顶 将栈顶两 d o u b l e 型数值相减并将结果压入栈顶 将栈顶两 i n t 型数值相乘并将结果 压入栈顶 将栈顶两 l o n g 型数值相乘并将结果压入栈顶 将栈顶两 f l o a t 型数值相乘 并将结果压入栈顶 将栈顶两 d o u b l e 型数值相乘并将结果压入栈顶 将栈顶两 i n t 型 数值相除并将结果压入栈顶 将栈顶两 l o n g 型数值相除并将结果压入栈顶 将栈顶两 f l o a t 型数值相除并将结果压入栈顶 将栈顶两 d o u b l e 型数值相除并将结果压入栈 顶 将栈顶两 i n t 型数值作取模运算并将结果压入栈顶 将栈顶两 l o n g 型数值作取模 运算并将结果压入栈顶 将栈顶两 f l o a t 型数值作取模运算并将结果压入栈顶 将栈顶 两 d o u b l e 型数值作取模运算并将结果压入栈顶 118 0 x 74 i n e g 119 0 x 75 l n e g 120 0 x 76 f n e g 121 0 x 77 d n e g 122 0 x 78 i s h l 123 0 x 79 l s h l 124 0 x 7a i s h r 125 0 x 7b l s h r 126 0 x 7c i u s h r 127 0 x 7d l u s h r 128 0 x 7e i a n d 129 0 x 7f l a n d 130 0 x 80 i o r 131 0 x 81 l o r 132 0 x 82 i x o r 133 0 x 83 l x o r 134 0 x 84 i i n c 135 0 x 85 i 2l 136 0 x 86 i 2f 137 0 x 8 7 i 2d 138 0 x 88 l 2i 139 0 x 89 l 2f 140 0 x 8a l 2d 141 0 x 8b f 2i 142 0 x 8c f 2 l 143 0 x 8d f 2d 144 0 x 8e d 2i 145 0 x 8f d 2l 146 0 x 90 d 2f 147 0 x 91 i 2b 14 8 0 x 92 i 2c 149 0 x 93 i 2s 150 0 x 94 l c m p 151 0 x 95 f c m p l 将栈顶 i n t 型数值取负并将结果压入栈顶 将栈顶 l o n g 型数值取负并将结果压 入栈顶 将栈顶 f l o a t 型数值取负并将结果压入栈顶 将栈顶 d o u b l e 型数值取负并将 结果压入栈顶 将 i n t 型数值左移位指定位数并将结果压入栈顶 将 l o n g 型数值左移 位指定位数并将结果压入栈顶 将 i n t 型数值右 符号 移位指定位数并将结果压入 栈顶 将 l o n g 型数值右 符号 移位指定位数并将结果压入栈顶 将 i n t 型数值右 无符号 移位指定位数并将结果压入栈顶 将 l o n g 型数值右 无符号 移位指定位数 并将结果压入栈顶 将栈顶两 i n t 型数值作 按位与 并将结果压入栈顶 将栈顶两 l o n g 型数值作 按位与 并将结果压入栈顶 将栈顶两 i n t 型数值作 按位或 并将 结果压入栈顶 将栈顶两 l o n g 型数值作 按位或 并将结果压入栈顶 将栈顶两 i n t 型数值作 按位异或 并将结果压入栈顶 将栈顶两 l o n g 型数值作 按位异或 并 将结果压入栈顶 将指定 i n t 型变量增加指定值 i i i 2 将栈顶 i n t 型 数值强制转换成 l o n g 型数值并将结果压入栈顶 将栈顶 i n t 型数值强制转换成 f l o a t 型数值并将结果压入栈顶 将栈顶 i n t 型数值强制转换成 d o u b l e 型数值并将结果 压入栈顶 将栈顶 l o n g 型数值强制转换成 i n t 型数值并将结果压入栈顶 将栈顶 l o n g 型数值强制转换成 f l o a t 型数值并将结果压入栈顶 将栈顶 l o n g 型数值强制转换 成 d o u b l e 型数值并将结果压入栈顶 将栈顶 f l o a t 型数值强制转换成 i n t 型数值并 将结果压入栈顶 将栈顶 f l o a t 型数值强制转换成 l o n g 型数值并将结果压入栈顶 将 栈顶 f l o a t 型数值强制转换成 d o u b l e 型数值并将结果压入栈顶 将栈顶 d o u b l e 型 数值强制转换成 i n t 型数值并将结果压入栈顶 将栈顶 d o u b l e 型数值强制转换成 l o n g 型数值并将结果压入栈顶 将栈顶 d o u b l e 型数值强制转换成 f l o a t 型数值并将 结果压入栈顶 将栈顶 i n t 型数值强制转换成 b y t e 型数值并将结果压入栈顶 将栈顶 i n t 型数值强制转换成 c h a r 型数值并将结果压入栈顶 将栈顶 i n t 型数值强制转换 成 s h o r t 型数值并将结果压入栈顶 比较栈顶两 l o n g 型数值大小 并将结果 1 0 1 压入栈顶 比较栈顶两 f l o a t 型数值大小 并将结果 1 0 1 压入栈顶 当其中一 比较栈顶两 f l o a t 型数值大小 并将结果 1 0 1 压入栈顶 当其中 一 比较栈顶两 d o u b l e 型数值大小 并将结果 1 0 1 压入栈顶 当其中一 比 较栈顶两 d o u b l e 型数值大小 并将结果 1 0 1 压入栈顶 当其中一 当栈顶 i n t 型数值等于 0 时跳转 当栈顶 i n t 型数值不等于 0 时跳转 当栈顶 i n t 型数值 小于 0 时跳转 个数值为 Na N 时 将 1 压入栈顶 152 0 x 96 f c m p g 个数值为 Na N 时 将 1 压入栈顶 153 0 x 97 d c m p l 个数值为 Na N 时 将 1 压入栈顶 154 0 x 98 d c m p g 个 数值为 Na N 时 将 1 压入栈顶 155 0 x 99 i f e q 156 0 x 9a i f n e 157 0 x 9b i f l t 158 0 x 9c i f g e 159 0 x 9d i f g t 160 0 x 9e i f l e p a g e 4 当栈顶 i n t 型数值大于等于 0 时跳转 当栈顶 i n t 型数值大于 0 时跳转 当栈 顶 i n t 型数值小于等于 0 时跳转 比较栈顶两 i n t 型数值大小 当结果等于 0 时跳 转 比较栈顶两 i n t 型数值大小 当结果不等于 0 时跳转 比较栈顶两 i n t 型数值大 小 当结果小于 0 时跳转 比较栈顶两 i n t 型数值大小 当结果大于等于 0 时跳转 比较栈顶两 i n t 型数值大小 当结果大于 0 时跳转 比较栈顶两 i n t 型数值大小 当结果小于等于 0 时跳转 比较栈顶两引用型数值 当结果相等时跳转 比较栈顶两引 用型数值 当结果不相等时跳转 161 0 x 9f i f i c m p e q 162 0 x a 0 i f i c m p n e 163 0 x a 1 i f i c m p l t 164 0 x a 2 i f i c m p g e 165 0 x a 3 i f i c m p g t 166 0 x a 4 i f i c m p l e 167 0 x a 5 i f a c m p e q 168 0 x a 6 i f a c m p n e 169 0 x a 7 g o t o 170 0 x a 8 j s r 171 0 x a 9 r e t 无条件跳转 跳转至指定 16 位 o f f s e t 位置 并将 j s r 下一条指令地址压入栈 顶 返回至本地变量指定的 i n d e x 的指令位置 一般与 j s r j s r w 联合使用 用于 s w i t c h 条件跳转 c a s e 值连续 可变长度指令 用于 s w i t c h 条件跳转 c a s e 值 不连续 可变长度指令 172 0 x a a t a b l e s w i t c h 173 0 x a b l o o k u p s w i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源汽车绿色金融财产信托融资合同范本
- 2025年乡村民宿客栈绿色环保装修工程服务合同
- 2025年企业车辆租赁合同书及续租操作细则
- 2025年医药市场深耕与品牌影响力提升全面合作协议
- 茶叶品牌建设专业培训及咨询服务合同
- 2025年高品质玄武岩石材定制加工合作协议
- 2025年网络安全技术成果转化与应用授权及安全产品定制开发合同
- 2026届湖南省邵阳市邵东县创新实验学校高二化学第一学期期中综合测试试题含解析
- 麻醉药品、精神药品培训考核试题及答案
- 混凝土结构耐久性设计与评估方案
- 2025年9.3纪念抗日战争胜利80周年阅兵式观后感-钢铁长城下的历史沉思与青春誓言
- 2025至2030中国竹纤维行业市场行业市场深度研究及发展前景投资可行性分析报告
- 豆芽成长记录课件
- 皮肤 T 细胞淋巴瘤诊疗指南(2025年版)
- (完整版)钢结构厂房施工组织设计(含土建)
- 水饺加盟合同协议
- DLT 572-2021 电力变压器运行规程
- 加强师德师风建设学校师德师风警示教育讲座培训课件
- 中国传统文化完整版课件全套ppt教学教程汇总最新最全
- 汽车构造底盘介绍(课堂PPT)
- CRC的职责PPT课件
评论
0/150
提交评论