Java命令执行浅析

Java命令执行浅析

一、Java执行命令的几种方式

1、java.lang.Runtime

Runtime.getRuntime().exec("calc");
Runtime.getRuntime().exec(new String[]{"cmd", "/c", "whoami"});

在这里插入图片描述
主要分为两大类:

第一类入参为String类型

第二类入参为String[]类型


2、java.lang.ProcessBuilder

ProcessBuilder pb = new ProcessBuilder("whoami");
pb.start();
new ProcessBuilder("cmd", "/c", "net user").start();
new ProcessBuilder(list).start();

在这里插入图片描述
在这里插入图片描述

构造方法如下两类:

public ProcessBuilder(String... command) 
public ProcessBuilder(List<String> command)



3、java.lang.ProcessImpl

Class clazz = Class.forName("java.lang.ProcessImpl");
Method method = clazz.getDeclaredMethod("start", String[].class, Map.class, 				String.class, ProcessBuilder.Redirect[].class, boolean.class);

method.setAccessible(true);
method.invoke(null, new String[]{"calc"}, null, null, null, false);

该类非Public修饰,所以在不同包下只能通过反射的方式去调用执行。




二、动态调试

跟进java.lang.Runtime类的调用过程:

调用Runtime.getRuntime()方法返回currentRuntime静态成员对象,
在这里插入图片描述



继续调用exec方法,这里exec方法重载,有多种同名不同参数类型方法,我们跟进参数为 (String command)的exec方法,继续往下走(exec方法返回类型均为Process抽象类):
在这里插入图片描述




进入public Process exec(String command, String[] envp, File dir) 方法:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值