Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

recuperer le bytecode d'une classe

5 réponses
Avatar
said.rabie
bonjour ,
j'aimerai savoir s'il existe un moyen pour recuperer le bytecode d'une
classe deja charger par un ClassLoader
une methode du genre:

bytes[] getByteCode(String className);

merci bcp ;)

5 réponses

Avatar
David
Le Wed, 17 May 2006 08:30:09 -0700, said.rabie a écrit :

bonjour ,
j'aimerai savoir s'il existe un moyen pour recuperer le bytecode d'une
classe deja charger par un ClassLoader une methode du genre:

bytes[] getByteCode(String className);


Tu la sérialize ...

Avatar
TestMan

bonjour ,
j'aimerai savoir s'il existe un moyen pour recuperer le bytecode d'une
classe deja charger par un ClassLoader une methode du genre:

bytes[] getByteCode(String className);


Tu la sérialize ...


Bonjour,

Tu peux développer ?

A+

TM


Avatar
said.rabie
Bonjour
non mais pas la peine qu'il develope car ca sert a rien de serialiser
:)

quand tu serialisze un objet meme un objet de type Class c'est just
l'objet lui meme qui est serialisé dans le flux pas le byte code :)

je me trompe ?
Avatar
obere
Non, tu ne te trompes pas. Serialiser c'est sauver le contenu des
champs de l'objet (en gros).

Il y a des outils permettant de manipuler le byte code.

http://asm.objectweb.org/
http://jakarta.apache.org/bcel/
http://serp.sourceforge.net/

Je ne pense pas que tu puisses le faire pour des classes deja loadees.
ASM propse la manipulation au moment du loading.

Bonne chance.
Avatar
said.rabie
oui merci bcp
j'ai suivie le processus du chargement de classes jusqu'au bout
le ClassLoader stoke dans sans cache (Hashtable) les Class en fonction
de leurs nom mais pas le bytecode

on perd tout trace du bytecode apres le passage dans la methode
defineClass qui fais apel a des methode native

private native Class defineClass0(String name, byte[] b, int off, int
len,
ProtectionDomain pd);

private native Class defineClass1(String name, byte[] b, int off,
int len,
ProtectionDomain pd, String
source);

private native Class defineClass2(String name, java.nio.ByteBuffer
b,
int off, int len,
ProtectionDomain pd,
String source);