In meinem Projekt implementiere ich einen JNI-Agent, der alle nativen Java-Methoden an meine benutzerdefinierten Methoden in meiner benutzerdefinierten ".c" Datei binden würde. Da der JNI-Agent native Methoden in Runtime bindet, werde ich nur über die Runtime-Lösung sprechen.C bekommen Funktionen Adresse
Wenn JNI nativen Methoden bindet, wird folgende Funktion aufgerufen:
void JNICALL NativeMethodBind(jvmtiEnv *jvmti_env,
JNIEnv* jni_env,
jthread thread,
jmethodID method,
void* address,
void** new_address_ptr)
An dieser Stelle ein Java-Methode gebunden wird in void* address
adressieren, wenn Sie etwas in void** new_address_ptr
setzen. Um eine Vorhangmethode neu zu binden, muss ich nur die new_address_ptr
- Variable überschreiben.
Jetzt möchte ich die Funktionen zu Funktion-Adressen in meiner benutzerdefinierten .c-Datei, die mehrere hundert verschiedene Methoden enthält. Und hier stecke ich fest. Wie erhalte ich die .c-Datei und die String-Namen der Funktionen, wie bekomme ich die Adressen der entsprechenden Funktionen in meiner .c-Datei?
Ich betreibe das Projekt auf Windows64 Maschine mit gcc 4.9.1
Wie wahrscheinlich ist, dass der String-Name der Funktion, die Sie haben, in der Datei '* .c' existiert, die Sie haben? – Gaurav
@GauravPathak sehr wahrscheinlich, wie es ist 100% sicher, dass es ... –
In c-code, Funktion Name ist auch seine Adresse, mit Assembly, Hinzufügen von "_" als Präfix. – sdao