读取 Java 变量

发布于 2024-07-18 13:48:26 字数 155 浏览 4 评论 0原文

我正在尝试从 C# 程序的进程外读取 Java 小程序的变量。 除了读取内存地址之外,还有什么方法可以从java小程序中获取变量的值吗? 这个 Java 小程序将在浏览器中运行。 如果无法从 C# 执行此操作,是否可以从不同的 java 小程序执行此操作?

谢谢。

I am trying to achieve reading variables from a Java applet out of process from my C# program. Apart from reading memory addresses, is there any way I can obtain values of variables from a java applet? This java applet will be running inside a browser. If it is not possible to do this from C#, would it be possible to do it from a different java applet?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

沩ん囻菔务 2024-07-25 13:48:26

是的,这是可以做到的。

C# 表单可以拥有可以托管 web 浏览器组件,并且可以启动 JScript,并且可以调用 Java applet 公共方法。

不久前,我制作了一个简单的网页,其中包含一个绘制“热门”彩色地图的小程序。 输入是通过 JScript 注入的,并且可以通过 AJAX 或任何其他可以在 HTML DOM 上触发 JScript 的应用程序来检索。

HTML 来源是:

<HTML><HEAD></HEAD><BODY> 
<SCRIPT> 
function call() {
    var inputData = "-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,1647,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,89,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,0,0,615,366,0,1198,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,0,2179,1262,764,200,0,0,609,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,0,0,3401,1940,0,210,0,-1,-1,162,0,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,0,-1,966,0,86,0,0,0,0,-1,-1,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,-1,250,53,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-1,1977,1413,128,0,0,0,0,0,0,-1,1413,2447,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,0,-1,0,0,0,0,0,0,0,-1,317,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,0,0,0,0,0,0,0,0,0,0,3246,2190,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,51,0,-1,0,0,0,-1,0,-1,0,-1,-1,1523,-2,-2,-2,-1,0,0,-2,-2,0,0,-2,-2,-2,-2,-2"
        + ";-2,0,0,0,0,0,0,0,0,0,0,1692,2028,2850,-2,0,-1,0,0,0,0,0,0,0,-1,-2,-2,-2,-2"
        + ";-2,0,0,0,0,0,-1,0,0,0,-1,1292,-2,-2,-2,0,0,-1,-1,0,0,0,0,0,-1,0,-2,-2,-2"
        + ";-2,0,-1,0,0,-1,0,0,-1,0,1028,1247,7675,9244,7940,0,-1,0,0,-1,0,0,0,0,0,0,0,-2,-2"
        + ";-2,-1,0,0,0,0,0,0,0,0,844,1114,2860,6631,4249,0,0,-1,-1,0,0,0,0,0,0,0,0,-2,-2"
        + ";-2,-2,0,0,0,-1,0,-1,0,0,0,-1,1958,2379,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-2"
        + ";-2,-2,-2,0,470,0,-2,-2,-2,0,0,0,-1,0,0,0,0,0,-1,0,-1,0,0,3574,2706,2195,-1,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,-1,-1,0,0,0,0,0,0,0,0,165,-1,-1,1282,867,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,-1,0,0,0,0,34,504,3098,2708,2324,-1,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,0,0,0,0,0,0,0,721,-1,3854,2783,-1,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,-1,0,0,0,-1,0,34,191,2455,4126,0,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,0,3982,2656,0,0,-1,0,0,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,-1,0,0,2194,0,0,0,0,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2";
    document.Necrodrip.update(inputData);
}
</SCRIPT> 
<FORM> 
<APPLET CODE="kuningriik.pdApplet.class"  
        NAME="Necrodrip" 
        width="1200" height="600"> 
</APPLET><br/> 
<INPUT type="button" value="Loo kaart" 
   onClick = "call()"> 
</FORM> 
</BODY></HTML> 

您可以在此处查看页面:链接

Yes, it can be done.

C# form can have can host webbrowser component, and it can fire JScript, and it can call Java applet public methods.

While ago, i made a simple webpage, that hosts an applet that draws 'hot'-colored map. Input is injected with JScript, and COULD be retrieved with AJAX or any other application that can fire JScript on HTML DOM.

Source of HTML is:

<HTML><HEAD></HEAD><BODY> 
<SCRIPT> 
function call() {
    var inputData = "-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,1647,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,89,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,0,0,615,366,0,1198,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,0,2179,1262,764,200,0,0,609,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,0,0,3401,1940,0,210,0,-1,-1,162,0,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,0,-1,966,0,86,0,0,0,0,-1,-1,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,-1,250,53,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-1,1977,1413,128,0,0,0,0,0,0,-1,1413,2447,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,0,-1,0,0,0,0,0,0,0,-1,317,0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,0,0,0,0,0,0,0,0,0,0,3246,2190,0,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,51,0,-1,0,0,0,-1,0,-1,0,-1,-1,1523,-2,-2,-2,-1,0,0,-2,-2,0,0,-2,-2,-2,-2,-2"
        + ";-2,0,0,0,0,0,0,0,0,0,0,1692,2028,2850,-2,0,-1,0,0,0,0,0,0,0,-1,-2,-2,-2,-2"
        + ";-2,0,0,0,0,0,-1,0,0,0,-1,1292,-2,-2,-2,0,0,-1,-1,0,0,0,0,0,-1,0,-2,-2,-2"
        + ";-2,0,-1,0,0,-1,0,0,-1,0,1028,1247,7675,9244,7940,0,-1,0,0,-1,0,0,0,0,0,0,0,-2,-2"
        + ";-2,-1,0,0,0,0,0,0,0,0,844,1114,2860,6631,4249,0,0,-1,-1,0,0,0,0,0,0,0,0,-2,-2"
        + ";-2,-2,0,0,0,-1,0,-1,0,0,0,-1,1958,2379,-1,0,0,0,0,0,0,0,0,-1,0,0,0,-2,-2"
        + ";-2,-2,-2,0,470,0,-2,-2,-2,0,0,0,-1,0,0,0,0,0,-1,0,-1,0,0,3574,2706,2195,-1,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,-1,-1,0,0,0,0,0,0,0,0,165,-1,-1,1282,867,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,-1,0,0,0,0,34,504,3098,2708,2324,-1,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,0,0,0,0,0,0,0,721,-1,3854,2783,-1,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,-1,0,0,0,-1,0,34,191,2455,4126,0,0,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,0,0,0,0,0,0,3982,2656,0,0,-1,0,0,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,-1,0,0,2194,0,0,0,0,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,0,0,-1,0,0,-2,-2,-2,-2,-2,-2,-2"
        + ";-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2";
    document.Necrodrip.update(inputData);
}
</SCRIPT> 
<FORM> 
<APPLET CODE="kuningriik.pdApplet.class"  
        NAME="Necrodrip" 
        width="1200" height="600"> 
</APPLET><br/> 
<INPUT type="button" value="Loo kaart" 
   onClick = "call()"> 
</FORM> 
</BODY></HTML> 

You can view page here: link

小帐篷 2024-07-25 13:48:26

如果您可以更改小程序的代码,则可以让它托管 RMI 服务器,这是 此练习。 不过,我不是该主题的专家 - 我认为它可能会受到各种安全限制。

如果您无法更改小程序,但可以更改显示小程序的 HTML 页面,则有两种方法可以从小程序访问信息。

第一种方法是使用 Javascript 编写小程序脚本,如 @Margus 建议的那样(小程序对象的所有公共方法都通过小程序的 DOM 对象公开)。

另一种方法是在页面中放置您自己的小程序,并使用 getAppletContext() 获取对其他小程序的引用。 这样做的主要好处是您可以通过反射从第三方小程序访问非公开信息,并使用 RMI 服务器发布它(如上所述)。

If you can change the code of the applet, you can have it host an RMI server, which is the subject of this excercise. I'm not an expert of the subject though - I assume it may be subject to various security restrictions.

If you can't change the applet, but you can change the HTML page showing the applet, there are two ways to access information from the applet.

The first way is scripting the applet with Javascript like @Margus suggests (all public methods of the applet object are exposed via the applet's DOM object).

The other way is putting an applet of your own in the page, and use getAppletContext() to obtain a reference to the other applet. The main benefit of doing it this way is that you can access non-public information from the third-party applet via reflection, and publish it with an RMI server (as above).

但可醉心 2024-07-25 13:48:26

这根本不可能。

根据定义,进程不共享内存或任何其他相关资源。 这是在操作系统级别强制执行的,您对此无能为力。

如果这是可能的,你只能想象这可能是什么安全/稳定性问题。

如果您确实需要进程间通信,请查看您所用语言的套接字编程。 请注意,这将需要对客户端(Java 小程序)和服务器(C# 进程)进行更改。

This is not possible, at all.

Processes, by definition, do not share memory, or any other resource for that matter. This is something that is enforced at the OS level, and you cannot do anything about that.

If this was possible, you could only imagine what security/stability issue this might have been.

If you really need inter-process communication, check out socket programming in your language. Note that this will require changes both to the client (your Java applet) as well as the server (the C# process).

∞琼窗梦回ˉ 2024-07-25 13:48:26

如果您安装了 JDK 并且正在运行更高版本的 JVM,则可以从正在运行的 Java 进程(包括在浏览器中)访问信息。 查看这些 JDK 工具

You can access information from running Java process (including in a browser) if you have a JDK installed and are running a later JVM. Take a look at these JDK tools.

骑趴 2024-07-25 13:48:26

这就是调试器一直在做的事情,所以显然这是可能的。 在 Sun Java 的最新版本中,在进程启动后,您可以相对轻松地附加 JVM 工具接口 (JVMTI)。 然而,这并不一定很容易。

如果您控制小程序源(或者即使您不控制),通过网络连接共享数据可能会更容易。

This is what debugger do all the time, so clearly it is possible. In recent versions of Sun Java you attach JVM Tool Interface (JVMTI) relatively easily after a process has started. However, it's not necessarily very easy.

If you control the applet source(or even if you don't), it's probably easier to share data over a network connection.

傲娇萝莉攻 2024-07-25 13:48:26

不。您尝试做的事情对于 Java Applet 或任何其他语言、进程来说都是不可能的。

No. What you are trying to do is impossible from a Java Applet or from any other language, process.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文