2017-09-10 29 views
1

我正在尝试学习JVM附加。我已经学会了如何将代理附加到JVM,并且它一切正常。我的问题是,附加后是否可以从目标内存中删除字符串?如果您使用Process Hacker 2搜索.jar,则可以在内存中找到它的路径。例如: In this screenshot there are alot of strings left in the memory如何从Java程序的内存中清除字符串?

我见过一些类似的程序,比如LSquad(这是一个清除Minecraft hacks字符串的程序)。我尝试使用Luyten反编译它,并且我看到它使用了一个外部DLL。你可以用原生的java做,还是需要外部库?

+0

您可以通过不再引用该字符串来删除字符串(并执行GC,最有可能需要完整的GC) –

+1

@PeterLawrey :但是你怎么能知道它已经从字符串池中删除/ gc'd? –

+0

在代理程序帮助中执行System.gc()吗? –

回答

1

您可以删除一个字符串或不是指该字符串的话(和执行GC,最有可能需要一个完整的GC)

在你的情况下,任何对象,字符串强调是一个罐子,最可能需要卸载该DLL以释放它。 (我不知道在JVM中是否或如何做)

+0

它实际上不是一个.dll文件,它只是一个包含Main类和Agent类的.jar文件。通过创建新的VirtualMachine将代理类加载到JVM中,该新的VirtualMachine连接到目标,成功加载后将分离。我不知道如何卸载该类,虽然 –

+0

@TsvetomirBonev要卸载一个类,您需要卸载加载它的ClassLoader(以及该ClassLoader加载的所有实例的所有引用) –

+0

您可以告诉我一个示例吗?我不是那种在Java中经验丰富的人(很可能很明显) –

相关问题