Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: josue9243 en 3 Noviembre 2017, 17:41 pm



Título: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 3 Noviembre 2017, 17:41 pm
Como hago tipo, pongo en .h esto:

Código:
int Function( int a )
{
         return a+5;
}

y Cada vez que lo utilize en un .cpp o en cualquier lado se cree una funcion con eso.

PERO NO INSERTARLO CORTE INLINE, sino que como que copia la funcion y la clona SÓLO PARA ESE USO EJEMPLO:

Código:
int roberto( int hola, int param )
{
          int a, b, c, d (?
          Function( 4 );
         blabla...
          Function( a + 10 );
}

y para cada vez que uso Function se clona sólo para ese uso en este caso se clona 2 veces.

Habia un XorStr de 007 Boy Scout que hacia eso con xorstr.


Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: ivancea96 en 4 Noviembre 2017, 00:00 am
La idea de una función es reutilizarla. ¿Por qué "clonarla"?
¿Hablas de tener otra función en memoria idéntica por cada uso?

¿Por qué necesitas esto?


Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 4 Noviembre 2017, 00:45 am
La idea de una función es reutilizarla. ¿Por qué "clonarla"?
¿Hablas de tener otra función en memoria idéntica por cada uso?

¿Por qué necesitas esto?

¿Porque tanta curiosidad? :v jajaja

Necesito eso porque si en IDA Pro algun vivo me reemplaza

sub_12933942 por CortarPapas();

se reemplaza en TODO el programa, entonces si hago que CortarPapas(); cada vez que lo utilizo se duplique clone o como quieran decirle.

entonces aparece

sub_239429349
sub_283474574
sub_192392939

:p xD


Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: CalgaryCorpus en 4 Noviembre 2017, 10:56 am
Se me ocurre una manera de hacerlo, pero no es tan directo como llegar e invocar una funcion. En C++, los templates generan codigo y cada especializacion es codigo distinto.
De esta manera, basta que uses una especializacion cada vez que invocas la funcion.

Ejemplo:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. template <int N> void myfunc1() {  cout << N << endl; }
  5.  
  6. template <int N> void myfunc2() {  cout << "No me importa el valor de N" << endl;  }
  7.  
  8. int main()
  9. {
  10.    // Invocar una funcion a la que le interesa usar el valor explicito
  11.    // todas las funciones son distintas
  12.    myfunc1<1>();
  13.    myfunc1<456>();
  14.  
  15.    // Invocar una funcion en que el parametro del template se ignora
  16.    myfunc2<1234>();
  17.  
  18.    return 0;
  19. }
  20.  

Puedes ver este codigo ejecutandose en este link:  http://goo.gl/x3aJ9X

No puedes usar variables como parametro de la especializacion. Solo constantes explicitas.



Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 4 Noviembre 2017, 15:23 pm
Jajaja si es igual que el otro código, y si se pueden usar parametros porque el XorStr del otro lo utiliza xD.

XorStr< int a1, int a2, int a3>XorStr( string );


Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: CalgaryCorpus en 4 Noviembre 2017, 16:16 pm
No dije que no se pueden usar parámetros.
Dije que no se pueden usar variables como parámetros de la especialización.

Vale decir, no puedes usar

mifunc<i>()

Solo puedes usar constantes, como en el ejemplo que mande

Yo no tengo a la vista el xorstr que mencionas.


Título: Re: ¿Cómo hago para crear una funcion que al usarla cree otra?.
Publicado por: josue9243 en 4 Noviembre 2017, 16:19 pm
Gracias!, funciona d10.