gpt4 book ai didi

java - 如何检测 Java 中的方法调用?

转载 作者:行者123 更新时间:2023-11-30 05:26:56 25 4
gpt4 key购买 nike

不确定这是否应该放在 StackOverflow 或其他 StackExchange 站点中,所以如果我把它放在错误的位置,请原谅我!

我目前正在开发一个系统,该系统运行发送给它的代码。有什么方法可以使用静态分析工具来查明是否调用了 Runtime.getRuntime().exec() 吗?我知道 PMD 和其他东西存在,但我不知道如何在这个例子中使用它们。

我知道我可以使用 Java 安全管理器,但这不是我想要的,因为我实际上只是获取代码,将其放入文件中,在其上运行 javac,然后运行它。

我也知道我可以为该确切的字符串执行正则表达式之类的操作,但是 Runtime.getRuntime() 可能存储在不同的变量中。

谢谢!

最佳答案

另一种可能性是获取所有当前线程并检查堆栈跟踪。不过,您必须创建一个观察者线程来不断检查方法调用......

public static void foo(){ 
Thread.currentThread();
Map<Thread,StackTraceElement[]> allLiveThreads = Thread.getAllStackTraces();
Set<Entry<Thread,StackTraceElement[]>> entries = allLiveThreads.entrySet();

for(Entry<Thread,StackTraceElement[]> entry : entries){

System.out.print("Thread: '"+ entry.getKey().getName()+"'");

if(entry.getValue().length>1) {
String nameofMethod = entry.getValue()[1].getMethodName();
System.out.println(" and method name '"+ nameofMethod+"()'");
}
else {
System.out.println(" with no methods.");
}
}
}

关于java - 如何检测 Java 中的方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58365729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com