elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  (Consula) ¿Se puede modificar una función en tiempo de ejecución?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: (Consula) ¿Se puede modificar una función en tiempo de ejecución?  (Leído 2,663 veces)
Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
(Consula) ¿Se puede modificar una función en tiempo de ejecución?
« en: 3 Octubre 2015, 08:35 am »

Hola. La pregunta viene del siguiente problema que me he planteado: quiero hacer un representador de funciones. El usuario ha de introducir una función cualquiera [ f(x)  = ...].

La idea que he tenido es convertir el string en código máquina (siguiendo una sintaxis xD)

La función en primera instancia se vería así:

Código
  1. float funcion(float x) {
  2.        // Aquí se insertaría el código en código máquina
  3.  
  4.        return x;
  5. }

Después de que el usuario haya introducido la función f(x) = x + 2, la función (en C++, Visual Studio)  se vería así:

Código
  1. int funcion(int x) {
  2. _asm {
  3. add x, 2
  4. };
  5.  
  6. return x;
  7. }

PD.: Quiero usar registros de 32 bits

Gracias


« Última modificación: 3 Octubre 2015, 08:51 am por Seyro97 » En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: (Consula) ¿Se puede modificar una función en tiempo de ejecución?
« Respuesta #1 en: 3 Octubre 2015, 09:36 am »

Te propongo otras opciones primero:
-Utilizar un lenguaje como python para realizar la ecuacion en tiempo de ejecucion
-Interpretar la ecuacion con C++

C++ es un lenguaje compilado. Puedes meter en una variable el binario de una función y llamarla como si de una funcion se tratase. Pero eso ya es muy complicado.


En línea

Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: (Consula) ¿Se puede modificar una función en tiempo de ejecución?
« Respuesta #2 en: 4 Octubre 2015, 12:54 pm »

Te propongo otras opciones primero:
-Utilizar un lenguaje como python para realizar la ecuacion en tiempo de ejecucion
-Interpretar la ecuacion con C++

C++ es un lenguaje compilado. Puedes meter en una variable el binario de una función y llamarla como si de una funcion se tratase. Pero eso ya es muy complicado.

Me interesa lo complicado (bueno, quizás no, pero quiero ver cómo se hace!!). ¿Cómo podría llamar a la función guardada en una variable (Supongo que de tipo double *)?
En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: (Consula) ¿Se puede modificar una función en tiempo de ejecución?
« Respuesta #3 en: 4 Octubre 2015, 13:45 pm »

Una función es un conjunto de bytes. Como tal, se pueden interpretar como código máquina, o como datos.

No me voy a extender. Lo que quieres no necesitará eso, pues para ello necesitarás realizar a mano algo parecido a un compilador.
En línea

Seyro97

Desconectado Desconectado

Mensajes: 145


Ver Perfil WWW
Re: (Consula) ¿Se puede modificar una función en tiempo de ejecución?
« Respuesta #4 en: 4 Octubre 2015, 14:31 pm »

Bueno, pues nada. Gracias por tus respuestas :D
En línea

Carlos Peláez González. visita http://www.taringa.net/EnjoyC para muchos tutoriales!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines