java - 如何检测 Java 中的方法调用?
问题描述
不确定这是否应该在 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.");
}
}
}
推荐阅读
- javascript - 在jquery中动态创建一个标签onclick函数而不是触发
- mysql - Getting table name with the select query of the same table
- reactjs - React FontAwesome Icon disappears when I add tag
- python - Trying to combine a list of lists in python
- angular - 在 Angular 中放置实用程序函数的位置
- kotlin - How to add coverage report (JaCoCo) to kotest based using build.gradle.kts?
- google-oauth - 使用 Angular 实现 Google One Tap Login
- batch-file - 如何在批处理脚本上设置临时标题?
- c++ - c++, infinite loop, sockets, Tic Tac Toe Program
- javascript - 为什么这个 Node/JS 函数在控制台中返回错误,但它仍然有效