首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是JAVA exec()uting?

什么是JAVA exec()uting?
EN

Stack Overflow用户
提问于 2016-11-08 12:02:15
回答 1查看 315关注 0票数 3

我在Linux上,我有一个Java应用程序(JAR归档),它使用exec()来完成它的工作。我需要找出哪些命令是应用程序exec()uting.我尝试了strace和j堆栈,但是没有任何结果。假设应用程序正在调用exec(" ls "),我是否可以通过对上面程序的输出进行查看就发现ls命令?

因此,问题是:是否有一种简单的方法可以观察Java应用程序如何使用exec()执行?

编辑以获得更好的情况概述:

假设在Java中,我有一个带有onclick监听器的按钮,它从另一个class.In调用静态函数,这个函数是exec("ls");调用的。当我单击该按钮时,我会看到以下内容:

futex(0x7f14a6f799d0, FUTEX_WAIT, 4968, NULLDownload button clicked ! Trying SCP FROM... <unfinished ...>

试着从.。在打电话给exec()之前就是我在那个按钮处理程序中的sout。

另一个编辑:谢谢你们,但我是从操作系统的角度.假设我是sysadmin并下载了JAR。我想知道(从外部)那个JAR在做什么--我只对从exec()开始的程序感兴趣

所以我尝试了strace,但是它并没有显示出调用来自执行层的命令.也许是因为太低的要求.

然后我尝试了jstack -m,但是从执行部分找不到任何类似于这个命令的东西。我试过拉绳,但运气不佳。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 13:12:44

好的,我要提出的是一种veeeeeeeeeery基本的做事方式,但这可能是你想要的。

您可能知道,.jar文件只是一个由.class文件组成的ZIP归档文件。如果您只需要查看将执行哪些命令,(如果您知道应该执行它们的类),可以使用gzip从jar文件中提取类文件,然后在它们上使用strings查找命令。

例如,下面是我能想到的使用exec()的最简单的类

代码语言:javascript
运行
复制
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        try {
            Runtime.getRuntime().exec("/bin/ls");
        } catch (IOException ignored) {}
    }
}

如果你做了strings Main.class,你应该得到这样的东西:

代码语言:javascript
运行
复制
[...]$ strings Main.class
<init>
Code
LineNumberTable
LocalVariableTable
this
LMain;
main
([Ljava/lang/String;)V
args
[Ljava/lang/String;
StackMapTable
SourceFile
        Main.java
/bin/ls
java/io/IOException
Main
java/lang/Object
java/lang/Runtime
getRuntime
()Ljava/lang/Runtime;
exec
'(Ljava/lang/String;)Ljava/lang/Process;

如您所见,可以将/bin/ls标识为字符串。在大多数情况下,除非您的Java程序以一种奇怪的方式构造命令,比如在运行时使用char数组来创建命令字符串,否则在大多数情况下都会起作用(在这种情况下,我会非常怀疑正在执行的命令)。

但是,如果您想看到命令实时执行,恐怕需要使用一些监视实用程序,因为大多数命令的使用时间太短,甚至不能出现在top等上。

编辑:关于strace:我看了一下Java用于UNIX系统的本机C代码,看起来它实际上使用execvpe()系统调用来运行用Runtime.exec()启动的所有命令

代码语言:javascript
运行
复制
    execvpe(argv[0], argv, envv);

因此,从理论上讲,您应该能够运行strace -e execvpe <java command...>来列出执行的每个命令(以及对execvpe()的所有其他调用--您需要进行更多的筛选,这是事实)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40486455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档