温故而知新 一 jar包反编译 并直接修改字节码文件

共 2925字,需浏览 6分钟

 ·

2022-01-04 22:16

最近闲了下来,有时间整理一下之前的项目,之前有封装的jar包,用jd-gui 查看源码,发现源码的方法里只有一个方法名,整个方法里都是//注释掉的效果,代码是如何执行的呢?

 public Map getORAPageSet(String sql, int pageNo, int pageSize) throws JDBCException { // Byte code:    //   0: getstatic 44  com/jy/framework/util/DBTool:log  Lorg/apache/commons/logging/Log;    //   3: invokeinterface 83 1 0    //   8: ifeq +12 -> 20    //   11: getstatic 44  com/jy/framework/util/DBTool:log  Lorg/apache/commons/logging/Log;    //   14: aload_1    //   15: invokeinterface 87 2 0    //   20: aconst_null    //   21: astore 4    //   23: aconst_null    //   24: astore 5    //   26: aconst_null    //   27: astore 6    //   29: aconst_null    //   30: astore 7    //   32: aconst_null    //   33: astore 8    //   35: ldc 195    //   37: astore 9    //   39: iconst_1    //   40: istore 10    //   42: iload_3    //   43: iconst_1    //   44: if_icmpge +13 -> 57


经研究 、是反编译工具的问题,jd-gui 有时候不太好用,换成Luyten问题解决,方法里都是正常的代码。

    public Map getORAPageSet(final String sql, final int pageNo, final int pageSize) throws JDBCException {        if (DBTool.log.isDebugEnabled()) {            DBTool.log.debug((Object)sql);        }        Connection conn = null;        PreparedStatement prestmt = null;        HashMap hashmap = null;        CachedRowSet wrset = null;        ResultSet rset = null;        try {            String sbak = "";            int actualPageNo = 1;            if (pageSize < 1) {                throw new JDBCException("\u9875\u9762\u5927\u5c0f(pageSize)\u4e0d\u80fd\u4e3a0\u6216\u8005\u4e3a\u8d1f\u6570\uff01");            }            conn = this.getConnection();            sbak = "Select Count(*) from (" + sql + ")";            prestmt = conn.prepareStatement(sbak);            rset = prestmt.executeQuery();            final int recTotal = rset.next() ? rset.getInt(1) : 0;            final int pageTotal = (recTotal - 1) / pageSize + 1;            rset.close();            actualPageNo = ((pageNo < 1) ? 1 : ((pageNo > pageTotal) ? pageTotal : pageNo));            sbak = "Select * from (Select chinarailoriginaltable.*,rownum as orarownum from (" + sql + ") chinarailoriginaltable where rownum < " + String.valueOf(actualPageNo * pageSize + 1) + ") where orarownum >= " + String.valueOf((actualPageNo - 1) * pageSize + 1);            prestmt = conn.prepareStatement(sbak);            rset = prestmt.executeQuery();            wrset = new CachedRowSet();            wrset.populate(rset);            rset.close();            hashmap = new HashMap();            hashmap.put("PageNo", new Integer(pageNo));            hashmap.put("PageTotal", new Integer(pageTotal));            hashmap.put("RecTotal", new Integer(recTotal));            hashmap.put("RowSet", wrset);        }        catch (JDBCException e) {            DBTool.log.error((Object)e.getMessage());            throw e;        }

第二个问题 现在想修改jar里面的 .class文件,经研究 下载软件 JByteMod ,可以直接修改字节码文件,然后保存后,项目引用 ,问题解决。

48736a014fafa09d6e5f740e36033b15.webp


浏览 55
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报