- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我最近遇到了这个问题:Debug a java application without starting the JVM with debug arguments
在 https://docs.oracle.com/javase/7/docs/technotes/guides/jpda/conninv.html 阅读有关 JVM 提供的各种连接器和传输的更多信息,我现在正试图找到以下问题的答案:
文档说对于 SADebugServerAttachingConnector 和 SAPIDAttachingConnector :
The process to be debugged need not have been started in debug mode(ie, with -agentlib:jdwp or -Xrunjdwp)
所以:
1) 为什么像 Xrunjdwp
这样的调试选项首先存在?
2) SADebugServerAttachingConnector 如何在参数中不带端口号的情况下工作?
3) 文档没有说明需要 root 权限。允许非特权用户任意调试未在 Debug模式下启动的 jvm 实例,这不是一个严重的权限提升漏洞吗?
最佳答案
我将重点关注 SADebugServerAttachingConnector
案例。
以下是来自 Java 11 version 的更多引述您链接到的文档的:
SA Debug Server Attaching Connector
This connector can be used by a debugger application to debug a process or core file on a machine other than the machine upon which the debugger is running.
This connector uses RMI to communicate with a 'debug server' running on the remote machine. Before the attach() method on this connector is called, the debug server must be started on the remote machine and told what process or corefile is to be debugged.
A process to be debugged need not have been started in debug mode(ie, with -agentlib:jdwp or -Xrunjdwp).
1) Why do debug options like Xrunjdwp exist in the first place then?
SA 调试服务器方法允许您在不想使用代理启动(例如出于安全原因)或没有先见之明的情况下调试 Java 进程。
相反,代理方法适用于您不想设置 SA 调试服务器来调试您的 Java 应用程序的麻烦。
正如他们所说,这是“类(class)用马”。
2) How does SADebugServerAttachingConnector work without taking a port number in the arguments?
您的调试器正在使用 RMI 默认端口与 SA 调试服务器通信。 SA 调试服务器使用服务器和目标已知的机制附加到目标 JVM。它很可能是一种特定于操作系统的机制。例如,在 Linux 上它可以使用 ptrace(2)
API。不需要涉及网络套接字和端口。
3) Documentation does not say anything about requiring root privileges. Is it not a serious privilege escalation vulnerability to allow arbitrary debugging of jvm instances not started in debug mode, by unprivileged users?
文档指出您需要专门设置 SA 调试服务器和目标 VM 之间的链接。这是在您启动 SA 调试服务器时完成的。
操作系统级访问控制不允许非根 SA 调试服务器使用(例如)ptrace
系统调用访问属于另一个用户/用户 ID 的 Java 进程。操作系统不会让您启动根 SA 调试服务器,除非您已经拥有根权限。因此,无论是在 root 还是非 root 情况下,都不会提升权限。
(模数任何未公开或未修补的操作系统级根升级错误......当然。)
关于java - JVM 调试连接器内部结构和安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55695202/
是否可以复制一个完整的 JVM,并且在故障转移的情况下只需将负载转移到复制的 JVM 上? 如果是,那我们该怎么做呢? 最佳答案 如果您的应用程序是 Web 应用程序,请阅读“集群”和“负载平衡”。大
我读了下面的话,但我想知道它们之间的区别...... JVM 规范、JVM 实现、JVM 运行时 最佳答案 JVM 规范:描述 JVM 应如何运行的文档。 JVM 实现:基于 JVM 规范的 JVM
我目前有四个不同的 java 应用程序,它们由 .bat 文件启动的 jar 运行,这些文件位于 Windows XP Embedded 开始菜单的 starup 文件夹中。我还启动了 Firefox
有人能给我一些关于强制 64 位 jvm 作为 32 位 jvm 运行的想法吗? 我需要为蓝牙连接编写一个 jse 桌面应用程序。为此,我需要实现 Bluecove jar 。它只有 32 位文件。所
我看到过关于这个问题的多条评论——有人说是,有人说不是,许多答案模棱两可。任何人都可以用更简单的术语描述它所在的位置吗?在一篇文章中,我什至看到有人说它与类加载器加载类的类内存共享相同的内存位置 -
我正在寻找所有可能的 jvm 退出代码的完整列表(不是 java System.exit(x))。我使用搜索引擎唯一能找到的是 SIGTERM 退出代码列表:http://journal.thobe.
为了监视任何正常的 Java 进程 JVM,我们可以使用 Attach API。是否有可用于监控 WebSphere JVM 的 API? 最佳答案 您可以使用 PMI(性能监控基础设施)来监控 JV
这个问题在这里已经有了答案: 8年前关闭。 Possible Duplicate: Java - C-Like Fork? 我想知道如何从 JDK fork 子 JVM,甚至有可能这样做吗? 一些框架
JVM 上的哪些图灵完备语言实现不使用 JVM 堆栈作为调用堆栈? (我问是因为我想在同一个线程中实现 Scala 和另一种语言之间的协程。) 最佳答案 闪蝶 SISC(方案代码的第二解释者) 曾经不
我看到here除了 Java 之外,还有很多语言可以在 JVM 上运行。我对在 JVM 中运行的其他语言的整个概念有些困惑。所以: 为 JVM 使用其他语言有什么优势? 为 JVM 编写语言/编译器需
我已经运行了 straced JVM (OpendJDK 11): strace -e trace=mmap java -Xms8192m Main 输出是: mmap(NULL, 8192, PRO
我已经运行了 straced JVM (OpendJDK 11): strace -e trace=mmap java -Xms8192m Main 输出是: mmap(NULL, 8192, PRO
我编写了一个简单的数独求解器。为了粗略测试性能,我使用简单的 System.currentTimeMillis 调用。 我在文本文件中准备了一组初始数独配置。该程序读取该文件并解决每个数独配置。运行测
JVM 被广泛使用:Scala、Groovy、Jython 等。我听说它被描述为“卓越”、“出色”和“严重低估”。为什么? 更具体地说,是什么让 JVM 独一无二?随着所有资金投入 .NET,或者 C
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Are there any Java VMs which can save their state to a fi
想象一下 6-7 台服务器的设置都完全相同Java 版本“1.6.0_18”OpenJDK 运行时环境 (IcedTea6 1.8) (fedora-36.b18.fc11-i386)OpenJDK
(如有错误请指正) 我了解到,当您通过发出 java 命令来运行 java 程序时, java MyProg 程序将在新的 JVM 上运行。 什么将程序加载到新的 JVM 中?是生成新线程的 JRE
我们有一个使用 JNI 的桌面应用程序偶尔会导致 JVM 崩溃。幸运的是,JVM 会生成一个 hs_err_pidXXXX.log 文件,这对于调试此类错误非常有用。然而,它似乎总是转到当前工作目录,
我在命令提示符下运行一个程序集 jar 文件并得到下面的异常。并导致终止。 Uncaught error from thread [ccp-akka.persistence.dispatchers.d
一、什么是Java虚拟机 虚拟机:指以软件的方式模拟具有完整硬件系统功能、运行在一个完全隔离环境中的完整计算机系统 ,是物理机的软件实现。常用的虚拟机有VMWare,Visual Box,Java
我是一名优秀的程序员,十分优秀!