如何使用Java从地址获取值?

时间:2010-08-18 03:03:18

标签: java memory hex editing memory-address

对于我用Java编写的混淆程序,我需要找到一种方法来获取特定地址的值。例如,在我用十六进制编辑器打开的程序中,地址0000001F是十六进制值“00”。此外,是否可以写入特定的内存地址?例如,写入0000001F并将其从“00”更改为例如“FF”

2 个答案:

答案 0 :(得分:1)

要回答您的第一个问题,您可以将文件作为二进制流打开,并从中读取您想要的任何内容。这对类加载器的方式没有太大作用,但如果你有一个自定义类加载器来操作文件并在运行时将其转换为有效并由JVM加载的类,那理论上肯定是可行的。我想知道重点是什么,因为类加载器本身不会以这种方式混淆。

要回答第二个问题,不能用Java直接写入内存地址。你可以通过JNI调用一个函数,它可以这样做(在JVM内存分配之外)。

听起来我觉得你正在使用错误的语言来做你想做的事。

答案 1 :(得分:1)

你使用的是错误的语言。 C或C ++是更好的选择,因为您可以轻松调用操作系统库(在大多数系统上)并尝试访问特定位置的内存。

大多数符合POSIX标准的操作系统都实现了mmap,它允许您在当前进程地址空间的特定位置映射内存。