Modifier un .class ??? - Java - Programmation
Marsh Posté le 20-01-2003 à 18:51:52
Blackangel a écrit : Avec kel logiciel peut on modifier un .class ?? (si C possible) |
pq tu ne modifies pas la source? ... Et si tu ne l'as pas, ban
Marsh Posté le 20-01-2003 à 21:33:41
C'est assez difficile, parait-il, mais bon, comme le suggère DarkLord, vois plutôt avec les sources.
Marsh Posté le 20-01-2003 à 21:56:36
Blackangel a écrit : Mai sinon C possible ????? |
Lorsque je faisais de la recherche, j'ai lu des papiers similaires faisant état de ce genre de pratiques... Mais très franchement, tente la décompilation du class en cherchant un freeware sur google, si ça marche pas, lâche l'affaire.
En revanche, je t'avertis que tu n'as pas le droit de décompiler à la sauvage. C'est interdit.
Marsh Posté le 20-01-2003 à 22:09:00
Cherrytree a écrit : Lorsque je faisais de la recherche, j'ai lu des papiers similaires faisant état de ce genre de pratiques... Mais très franchement, tente la décompilation du class en cherchant un freeware sur google, si ça marche pas, lâche l'affaire. |
Marsh Posté le 21-01-2003 à 10:09:45
Blackangel a écrit : Avec kel logiciel peut on modifier un .class ?? (si C possible) |
Je recherche aussi une solution et il existe un package completely gratos qui s'appelle BCEL. tu tapes BCEL dans google et le tour est joué (BCEL.JAR)
Par contre pour l'utiliser c'est assez hard, je suis dessus depuis 3 heures et j'ai juste réussi à inclure une nouvelle méthode ds une classe. Bon courage
Marsh Posté le 21-01-2003 à 10:12:03
tomlameche a écrit : |
Mmh ca peut m'interesser ca... Depuis le temps que je veux ajouter des méthodes a l'execution... Ca se passe comment ? ca modifie le .class, ou ca rajoute la méthode a l'exécution ?
Marsh Posté le 21-01-2003 à 10:17:21
lorill a écrit : |
Ca rajoute les méthodes à l'éxécution.
Il existe aussi 2 autres sources de ce type SERP et (je ne me souviens plus)
Marsh Posté le 21-01-2003 à 13:50:10
lorill a écrit : |
Tu peux aussi réécrire la classe. Je viens de tester et ca marche à merveille.
Marsh Posté le 21-01-2003 à 14:00:37
jode
j'ai déjà eu l'occasion d'utiliser (un malheureux 'rm -fr * ' au lieu de 'rm -fr *~' et voilà que ...
De plus, une interface graphique c'est cool
Marsh Posté le 21-01-2003 à 14:59:09
tomlameche a écrit : |
oui mais ca je veux pas faire... Pour rajouter une méthode a String par exemple, je préfère le faire au chargement de l'appli que de modifier une classe du jdk
Marsh Posté le 21-01-2003 à 15:06:47
Attention, c'est différent et la meilleure solution est écrire une class myString qui hérite de la String de jdk Et donc dans tous tes prog. tu utilise ta classe ... sinon, impossible (mais en plus stupide, très limitée et inutile)
Marsh Posté le 21-01-2003 à 15:15:33
western a écrit : Attention, c'est différent et la meilleure solution est écrire une class myString qui hérite de la String de jdk Et donc dans tous tes prog. tu utilise ta classe ... sinon, impossible (mais en plus stupide, très limitée et inutile) |
je sais tout ca, merci
Mais ce que je veux c'est rajouter des trucs aux types de base. Ce qui est faisable sans problème dans pas mal de langages (ruby, python, smalltalk pour ne citer qu'eux).
L'interet est surement discutable, mais avant le jdk1.4 y'avait pas de split dans String par exemple. Si je veux en faire un, j'ai deux solutions : une méthode de classe qui prends une String en parametre, ou un MyString. Les deux sont moches d'un point de vue objet.
C'est justement pour cela qu'ajouter des méthodes au runtime peut m'interesser, mais si ca marche pas tant pis, je me débrouille sans.
Marsh Posté le 21-01-2003 à 15:42:30
western a écrit : Attention, c'est différent et la meilleure solution est écrire une class myString qui hérite de la String de jdk |
String est final pour ton info ...
Marsh Posté le 21-01-2003 à 15:45:14
DarkLord a écrit : |
jamais compris pourquoi non plus... on est obligé d'encapsuler tout ca
Marsh Posté le 21-01-2003 à 15:46:23
western a écrit : Attention, c'est différent et la meilleure solution est écrire une class myString qui hérite de la String de jdk |
Ca va être dur, String est finale
Marsh Posté le 21-01-2003 à 16:16:49
Effectivement, avec final c'est plus dur mais pas on peut ne pas hériter ...
Marsh Posté le 21-01-2003 à 16:19:19
western a écrit : Effectivement, avec final c'est plus dur mais pas on peut ne pas hériter ... |
Marsh Posté le 21-01-2003 à 16:22:32
ReplyMarsh Posté le 21-01-2003 à 16:25:16
un truk bourrin:
Code :
|
Marsh Posté le 21-01-2003 à 16:27:27
Oui, je sais
Le problème, c'est que dans ce cas, une myString, n'est pas une string. C'est un peu pénible de la passer en paramètre à
File.File(String pathname)
par exemple (oui, toString, je sais).
Et ça l'est encore plus d'affecter le résultat de File.getName à une MyString (sauf une static MyString.fromString).
Mais je trouve ça un poil lourd à écrire, j'aimerais éviter de "caster" continuellement
Marsh Posté le 21-01-2003 à 16:31:54
tout a fait d'accord, c'est bien pour ca que je préfère rajouter réellement la méthode a la classe
<pub>d'ailleurs en Lucane ca se fait (presque) sans probleme</pub>
Marsh Posté le 21-01-2003 à 16:33:41
bah oui c'est penible avec MyString ...
Le problème d'ajouter des fonctions aux sources de JDK est que l'appli n'est plus portable ...
Marsh Posté le 21-01-2003 à 16:35:22
L'avenir est aux langages ayant des structures de données modifiables dynamiquement à l'éxécution. \o/
Marsh Posté le 21-01-2003 à 21:43:13
kadreg a écrit : L'avenir est aux langages ayant des structures de données modifiables dynamiquement à l'éxécution. \o/ |
python \o/
(euh en fait jsuis meme pas sur de ce que je dis )
Marsh Posté le 23-01-2003 à 15:33:54
tomlameche a écrit : |
N'importe quoi...
Je m'explique :
Hotswap est actuellement une des rares solutions pour modifier des classes a la volee a l'execution (et la seule integree a la VM depuis la JDK 1.4)... Et il se limite au remplacement du bytecode des corps de methodes (donc pas de modifications de signatures, ajouts de methodes)
Pour la JDK 1.5 ils prevoient plus mais d'apres ma derniere discussion l'ete dernier avec le responsable de Hotswap, ils n'etaient meme pas sur de continuer a bosser dessus faute de financement (ca a peut etre change depuis).
De toute facon le hotswap pose enormement de problemes (c.f. recherche sur le USE.)
Sinon BCEL, Javacc, SOOT sont des outils permettant le bytecode rewriting. Apres reecriture tu peux reloader une classe, mais il te faudra enlever toute reference a celle-ci du cache de la VM : c-a-d faire un GC sur le classloader qui a loade la classe. Ca n'a rien d'une modification a l'execution (a chaud).
Marsh Posté le 20-01-2003 à 18:45:57
Avec kel logiciel peut on modifier un .class ?? (si C possible)
Merci