小编mih*_*ihi的帖子

是否有任何Java Decompiler可以正确反编译对重载方法的调用?

考虑这个(恕我直言)简单的例子:

public class DecompilerTest {
    public static void main(String[] args) {
        Object s1 = "The", s2 = "answer";
        doPrint((Object) "You should know:");
        for (int i = 0; i < 2; i++) {
            doPrint(s1);
            doPrint(s2);
            s1 = "is";
            s2 = new Integer(42);
        }
        System.out.println();
    }

    private static void doPrint(String s1) {
        System.out.print("Wrong!");
    }

    private static void doPrint(Object s1) {
        System.out.print(s1 + " ");
    }
}
Run Code Online (Sandbox Code Playgroud)

在没有调试信息的情况下用源/目标级别1.1编译它(即不应存在局部变量信息)并尝试对其进行反编译.我尝试过Jad,JD-GUI和Fernflower,他们都至少有一个错误的调用(即程序打印"错误!"至少一次)

真的没有java反编译器可以推断出正确的强制转换,以便它不会调用错误的重载吗?

编辑:目标级别1.1,以便不存在特定于Java6的快速验证信息.这可能会给反编译器一个线索,即s1已被声明为Object而不是String.即使没有这些信息,反编译器也应该能够反编译代码(不一定得到原始变量类型,但显示相同的行为),特别是因为许多混淆器也将它剥离.

反编译器出了什么问题:

  • 他们(Object)在第一次通话中错过了演员.
  • 他们推断的类型s1String …

java jad decompiler

8
推荐指数
2
解决办法
6611
查看次数

是否有支持Annotate/Blame的java的Diff库?

我正在挖掘Google的免费(开源)Java差异库的结果,并且似乎有很多(其中一些甚至使用通用对象而不仅仅是使用字符串).

在我挖掘大量搜索结果而没有找到我正在搜索的内容之前,我先问一下:

这些差异库是否支持cvs annotate或svn blame等功能.我想要

  • 将电流String[]传递给函数
  • 继续将旧版本的String[]函数传递给函数,直到我用完所有版本,或者库告诉我没有原始行未被注释(最后一件事不是必须但非常有用,因为检索旧版本的String[]很贵,所以我想尽早停下来)
  • 调用一个函数,它给我一个ìnt[]告诉我当前版本的每一行,它在哪个版本上次更改或者它是否根本没有改变(即最后一个版本中的最后一个更改).

支持非Strings的对象很好,但没有必要.如果API不完全那样,我想我可以忍受它.

如果没有,任何人都可以建议一个可扩展的差异库,其中可以轻松添加该功能,最好是希望接收该功能作为贡献(并且在接受贡献之前不需要填充大量文书工作,例如GNU项目)?然后,我会自愿(至少尝试)将其添加到那里.

java diff annotate blame

8
推荐指数
1
解决办法
661
查看次数

如何在运行时将JSR-045 SMAP信息添加到Java堆栈跟踪?

使用JSP或转换为Java源代码(或存根)的其他语言时,通常会生成一个SMAP文件,稍后可以将其嵌入到Class文件中以供调试器显示更好的堆栈跟踪(或者在Jasper的情况下)它会自动嵌入).

有一个旧的JVM错误(或RFE)来添加支持以在堆栈跟踪中包含SMAP信息,但由于缺乏活动,似乎Sun/Oracle人员更喜欢每个人自己后处理他的堆栈跟踪.

所以这是我的问题:如何做到这一点?周围的图书馆是否为您做了艰苦的工作,或者您是否必须自己实施一切?

我已经找到了一个好地方,我可以访问异常对象和加载"SMAP enabled"类的类加载器.现在我必须

  • 迭代堆栈跟踪
  • 如果我能找到课程,请检查每个条目
  • 使用例如ASM分析类以提取SMAP信息
  • 编写一个SMAP解析器,用于解析SMAP信息中的反向行映射和文件名
  • 根据映射替换堆栈跟踪元素(或者添加一个新的?什么更好?)
  • 缓存一些信息,以便在几秒钟之后重新出现完全相同(或类似)的堆栈跟踪时,我不必再次执行相同的操作.

而且因为它似乎是一个单调乏味且容易出错的任务,我希望有人已经这样做了,我只需要为我的依赖项添加一个库,并makeStacktraceFancy为我的异常调用一个方法,以便在我记录它们之前使堆栈跟踪变得有趣.

java jsp bytecode

6
推荐指数
1
解决办法
1130
查看次数

如何使用Java验证证书是否为EV证书?

考虑以下示例代码,它使用 aTrustManager来记录传出连接是否使用有效证书(但在所有情况下接受连接):

import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*;

public class CertChecker implements X509TrustManager {

    private final X509TrustManager defaultTM;

    public CertChecker() throws GeneralSecurityException {
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
        tmf.init((KeyStore)null);
        defaultTM = (X509TrustManager) tmf.getTrustManagers()[0];
    }

    public void checkServerTrusted(X509Certificate[] certs, String authType) {
        if (defaultTM != null) {
            try {
                defaultTM.checkServerTrusted(certs, authType);
                System.out.println("Certificate valid");
            } catch (CertificateException ex) {
                System.out.println("Certificate invalid: " + ex.getMessage());
            }
        }
    }

    public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {}
    public X509Certificate[] getAcceptedIssuers() { return …
Run Code Online (Sandbox Code Playgroud)

java ssl certificate

5
推荐指数
1
解决办法
6511
查看次数

是否有任何库可用于解析Java中的"数字表达式",如1,2-9,33-

我不认为这很难,只是单调乏味:一些小的免费(如在啤酒中)库,我可以放入一个像1,2-9,33这样的字符串,它可以告诉我一个给定的数字是否匹配表达.就像大多数程序在其打印范围对话框中一样.仅用于匹配奇数或偶数的特殊函数,或匹配每个2 mod 5(或类似的东西)的数字将是不错的,但不是必需的.

我必须在此列表上执行的唯一操作是范围是否包含给定(非负)整数值; 当然,更多的操作,如最大/最小值(如果它们存在)或迭代器会很好.

如果有人输入1-10000000但是我将要查询的唯一数字是12345,那么它不会占用大量内存需要什么:-)

(为了实现它,我会将列表解析为几个(min/max/value/mod)对,例如1,10,0,1为1-10或11,33,1,2为1-33odd,或12 ,12,22/10的62,2,10(即12,22,32,...,62),然后检查所有间隔的每个数字.使用Integer.MaxValue等打开间隔.如果没有库,任何想法做得更好/更有效?)

java parsing expression design-patterns numbers

5
推荐指数
1
解决办法
2396
查看次数

如何从HTML中删除无关紧要的空格

我必须比较HTML页面的不同版本以进行格式化和文本更改.不幸的是,创建它们的人/公司使用某种HTML编辑器,每次重新包装所有HTML(并增加大量的空白),这使得很难区分它们.所以我正在寻找一种工具(最好是一个Java库),它可以重新格式化我的HTML,以便删除所有无关紧要的空格和换行符.

这意味着,在

<h1>First Headline</h1> <h2>Second headline</h2>
Run Code Online (Sandbox Code Playgroud)

之间的空间</h1>,并<h2>应被删除,但在

<b>formatted</b> <i>text</i>
Run Code Online (Sandbox Code Playgroud)

空格可能无法删除.我不关心<pre>,<textarea><script>阻止,也不关心可以改变行为的CSS空白属性 - 我只是在寻找一个解决大多数不必要的空白的解决方案(最好留下太多的空白而不是太少).

(我已经折叠了多个空格并在标签之前重新添加换行符而不是空格,以使文本更具可读性 - 但是仍有太多情况,例如标题或表格单元格/行之间的新换行符打破了我的简单"解决方案" .)

html java whitespace

3
推荐指数
1
解决办法
2605
查看次数