Изменение методов Java / байт-кода во время выполнения с переполнением стека

я и мой друг работаем над проектом кодирования, и мы столкнулись с небольшой проблемой. По сути, мы пытаемся изменить методы Java / байт-код во время выполнения, используя C ++. Мне просто любопытно, возможно ли это или как это возможно. Мы уже пытались использовать 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
}

По сути, мы хотим изменить возвращаемое значение на то, что нам нужно во время выполнения, путем манипулирования байтовым кодом.

-3

Решение

Для этого существует общедоступный стандартный API — JVM TI RedefineClasses а также RetransformClasses.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]