【问题标题】:Replace call to System.currentTimeMillis() at runtime在运行时替换对 System.currentTimeMillis() 的调用
【发布时间】:2015-12-20 06:22:37
【问题描述】:

我正在使用一个使用System.currentTimeMillis() 的JAR 文件来获取当前系统时间。当JAR文件的函数调用System.currentTimeMillis()时,我想调用我当前的时间方法(nanoTime())。

有什么建议可以解决这个问题吗?

【问题讨论】:

  • 没有源码,最简单的就是反编译相关类,改调用,然后重建jar。
  • JAR 文件已加密,无法反编译然后重建。
  • 当然可以,不然JVM就加载不出来了。不可能动态更改类在运行时进行的调用。如果无法更改 JAR,则无法更改类调用的内容。
  • 你在问类似this的问题吗?
  • 不完全是。替换调用时间方法的一种方法是替换所有使用该方法的方法。我知道如何使用 Javassit 做到这一点。但是,问题是我需要覆盖 100 多个方法。所以,不是好主意。另一方面,我不确定是否可以使用 Javassit 覆盖 System.currentTimeMillis() 方法。如果可能,请告诉我?

标签: java reflection


【解决方案1】:

嗯...实现你自己的java.lang.System 浮现在脑海中。但是你还需要设置你的引导类路径,谁知道还有什么可以让这个工作。你最终可能会修补rt.jar

尽管将“真实的”System 类用于所有其他目的会很棘手。

我希望您只打算在一台机器上执行此操作 - 我无法想象部署这样一个系统会遇到什么麻烦。

【讨论】:

    猜你喜欢
    • 2014-04-27
    • 2019-03-25
    • 2014-05-24
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    相关资源
    最近更新 更多