使用C 修改Java方法/字节码
Modifying Java Methods/Bytecode in Runtime with C++
我和我的一个朋友正在从事一个编码项目,我们遇到了一个小问题。我们基本上正在尝试使用C 在运行时修改Java方法/字节码。我只是好奇是否可能或可能如何。我们已经尝试使用JVMTI和JNI来实现这一目标,但是似乎您只能修改当前正在加载到JVM中的类。在流程运行时,我们将代码加载为DLL,因此我们无法执行此操作。我们还认为,组装可以通过实现这一目标来起作用。在下面可以看到一些我们试图做的事情的展示。
public boolean Method()
{
boolean value = true;
return value; //<- Value that we want to modify (in java)
}
jclass JVMUtilities::getClass(std::string clazzname) {
jstring name = Wrapper::getJVMHook().getJNI()->NewStringUTF(clazzname.c_str());
jobject classLoader = getclassloader();
jmethodID mid = Wrapper::getJVMHook().getJNI()->GetMethodID(Wrapper::getJVMHook().getJNI()->GetObjectClass(classLoader), "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
return (jclass)Wrapper::getJVMHook().getJNI()->CallObjectMethod(classLoader, mid, name);
//This is the function we use for geting the class information in c++ including location
}
基本上是上面的,我们希望通过操纵字节代码将返回值更改为我们想要的内容。
有一个公共标准API可以做到这一点-JVM Ti redefineclasses和RetanSformClasses。
相关文章:
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 一种从内存中删除 UTF 字节的方法?
- 优雅和最短的方法,只保存一半的字节
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 以随机可重现的顺序生成非重复字节的快速方法
- 使用原始字节向量作为提升序列化的存档的任何方法
- 需要帮助从12个字节生成新的24字节RGB查找阵列,或者是一种更好的编码方法
- 快速简单的方法,以C++为单位一次读取一个字节的 stdin
- C++,在阻塞模式下从套接字读取所有可用字节的最佳方法
- 将数组与传入的字节*缓冲区进行比较的最快方法
- 如何在-120到120之间更改int到char(或其他简单保存为一个字节的简单方法)
- 在自定义 C/C++ 程序中获取 PPP0 接口 Tx/Rx 字节的最简单方法是什么?
- 使用C 修改Java方法/字节码
- C 在流中过滤字节的最佳方法
- 将字节数组从c++传递到c#程序集的不同方法是什么
- C :合并并将UINT分为4个字节的最快方法
- 在字节的一部分中存储整数的最快方法
- 在opencv中使用imshow显示字节数组的最快方法是什么?
- x86-64上检查指针范围是否跨越N字节对齐地址的最快方法
- 水平求和SSE无符号字节矢量的最快方法