Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Lopardo en 30 Octubre 2007, 03:25 am



Título: ¿Cómo lograr compilar de esta manera?
Publicado por: Lopardo en 30 Octubre 2007, 03:25 am

Bueno hace tiempo toque este tema un poco, solo que ahora vengo con unas cuantas evidencias por así decirlo y bueno espero que en conjunto encontremos la solución a este caso muy particular y realmente extraño, pensé en agregar este mensaje al mismo tema anterior, pero leí unas letras en rojo que decían que habían pasado más de 60 días y bueno preferí crear uno nuevo (bueno en realidad me lo aconsejaba el mensaje, eso creo).

¿Cómo es posible que un método tenga campos con el mismo nombre y métodos con el mismo nombre?


Bueno he intentado compilar clases con algún error y no lo he conseguido. Cuando digo error me refiero a métodos con el mismo nombre (no sobrecargados), es decir, reciben los mismos parámetros ambos y no importa lo que retorna. Mi pregunta es, ¿Cómo se logró compilar esta clase?, se supone que al codificarla en cualquier editor se detectaría el error y no permitiría compilarla, corríjanme si me equivoco.

Se estarán preguntando cual es mi problema con eso, bueno mi problema es que tengo unas cuantas *.class y me gustaría modificarle alguna parte del código, pero al decompilar la clase ya no podré compilarla de nuevo porque me daría error.

¿Cuál creen que sería la solución?.... Claro, aparte de codificar la clase completa, ya que mi idea es hacer uso de una clase cualquiera y modificarla.

Aquí les pongo unas imágenes:

(http://www.miempresaaldia.com/Img%20principal/imagen1.jpg)

Como se puede ver en la figura la clase “af.class” tiene varios campos con el nombre “a”, en lo único que diferencia es en el tipo de dato, y como sabrán eso no es suficiente para ser permitido en java.

(http://www.miempresaaldia.com/Img%20principal/imagen2.jpg)

En esta otra se ven varios métodos con el nombre “a()”, no entiendo como es posible tener varios métodos con igual nombre.

La clase ejemplo la obtuve de un jar que descomprimí e hice la pregunta, no tiene importancia su contenido, pero si la quieren la puedo subir.

Para que vean intente crear una clase con métodos iguales o campos iguales y verán que no se puede compilar porque da un error, bueno si alguien lo logra por favor diga la manera para aprenderla.

Tiempo si escribir, bueno espero su ayuda. Saludos a todos.


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Casidiablo en 30 Octubre 2007, 15:35 pm
Pues raro si es... el código es decompilado verdad?


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Lopardo en 30 Octubre 2007, 22:52 pm
Bueno la clase "af.class" no ha sido decompilada solo la saque del .jar y si la decompilas se puede ver que tiene métodos repetidos y todo lo que comente arriba...

Gracias.. Saludos.. Espero sus respuestas


Título: ¿Cómo lograr compilar de esta manera?
Publicado por: egyware en 31 Octubre 2007, 17:03 pm
valla vastante raro seguramente tiene una proteccion (ofuscacion creo), pero si lo sacaste de un jar solo el source o lo descompilaste, aunque no creo eso si alguien pudo haberlo colocado ahi para despistar (sin enojarse), porque yo sabia de java que solo se permitia methodos sobrecargados pero esto  :huh: :huh: :huh: hasta yo sigo despistado.
Ups ahora leyendo bien el mesaje como es eso posible??????!!! :o :o :o :o
porque no subes la clase como pa verla uno e indagar mas en eso


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Lopardo en 31 Octubre 2007, 17:56 pm
Bueno aquí les pongo una clase ejemplo que presenta tres métodos con igual nombre. http://www.miempresaaldia.com/Img%20principal/a.class (http://www.miempresaaldia.com/Img%20principal/a.class)

Bueno espero que se logre dar con la solución porque es bastante interesante.

Saludos a todos.


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: egyware en 31 Octubre 2007, 18:37 pm
como duda crees que haya un error con las clases de java.lang.reflect que son las encargadas de leer nombre methodos de esa forma, algun bugs no conocido ????


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Lopardo en 31 Octubre 2007, 20:19 pm
Bueno eso que dices no lo sabia, voy a leer al respecto.. pero al decompilarlo se ve igual que al visualizarlo desde afuera, asi que dudo que ese sea el problema, de todas formas hay que leer.

Saludos.


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Amab en 31 Octubre 2007, 21:01 pm
Ah, varios métodos con el mismo nombre en la misma clase. No lo había leído bien.

Aunque dices que tienes varios *.class, lo que me hace pensar que quizá sean varias subclases y una superclase, lo que me lleva a pensar que puede ser un caso de polimorfismo.

Un saludo.


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Lopardo en 31 Octubre 2007, 23:50 pm
para que se vea mejor es algo así en una sola clase.


class ejemplo
{
  public ejemplo()
  {
    //Lo que sea.
  }
 
  public void metodo1()
  {
    //Lo que sea.
  }
 
  public int metodo1()
  {
     //Lo que sea.
  }

  public long metodo1()
  {
    //Lo que sea.
  }

  public void metodo1()
  {
     //Lo que sea.
  }
}

A eso me refiero en una sola clase hay varios métodos de igual nombre, también pueden ver el ejemplo que les puse en el link en uno de los mensajes anteriores, se llama "a.class".

Si intentara compilar esta clase daria error porque hay métodos repetidos, a eso me refiero.

Saludos


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: marioly en 3 Noviembre 2007, 15:17 pm
is not that difficult

usas genericos:

(http://img223.imageshack.us/img223/435/metgenec7.jpg)

no es un efecto, ni es nada raro, es (como dijeron) un tipo de polimorfismo, haciendo esto el compilador tiene un modo de identificar cada metodo


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Lopardo en 9 Noviembre 2007, 22:31 pm
¿y puedes hacer una clase de esta manera?.. Acaso no daria error... Bueno si es polimorfismo deberia funcionar y no es así. Aunque el caso no es si es o no polimorfismo sino como se hizo esto.

Gracias. Saludis


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: egyware en 16 Noviembre 2007, 14:48 pm
como duda hay una clase que se llama void y que curiosamente uno no la puede usar por que esta reservada para los metodos void y como mi ingles empeora cada dia ayer lei algo sobre una clase tipo primitiva (byte int char) en javadoc talvez sea un caso de polimorfismo


Título: Re: ¿Cómo lograr compilar de esta manera?
Publicado por: Ragnarok en 17 Noviembre 2007, 00:32 am
Más que polimorfismo yo diría que el nombre de los métodos se ha perdido por el decompilador. Para averiguarlo es tan sencillo como hacer un pequeño programa de prueba en el que una clase tenga varios métodos cuyos parámetros de entrada y salida sean distintos y hará lo mismo, luego se hace uno con varios métodos con nombres diferentes y (si el decompilador funciona) les dará distintos nombres, probablemente a, b, c...