C/Visual C - Copiar una funcion

 
Vista:

Copiar una funcion

Publicado por endless_loop (11 intervenciones) el 25/10/2006 22:06:55
Holas, tengo una duda:

Se que en assembler se puede copiar todo un codigo entre dos labels a un buffer auxiliar... lo q quiero hacer es en C, exactamente lo mismo.

Ponganle un procedimiento o funcion ... pirulo().

int pirulo(int x){
int i = x/2;
int j = i*i;
return j;
}

ahora..... yo quisiera saber como hacer para obtener cuanto pesa la funcion.... algono tiene idea?

(ejemplo... para hacer algo como:

unsigned int i = tamanioprocedimiento(pirulo);
char *orig = (char *) pirulo;
char *buffer = malloc(i);
for(j=0;j<i;j++) {*buffer = *orig;};

//y bueno lo q siga despues. Ponganle q tamanioprocedimiento lo hago, como se debe, esperar un procedimiento del tipo int (*proce)(int)


Weno.... me vendria muy bien :).

Gracias :).
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Copiar una funcion

Publicado por Carlos (34 intervenciones) el 26/10/2006 00:41:19
Si lo que necesitas es saber cuantos bytes se te van por función lo que tendrías que hacer es sumar el numero de bytes por variable que intervienen en la misma y listo. Puedes utilizar sizeof Por ejemplo

int b;
char mama;
b=sizeof mama;

En b se guardará 1, ya que mama tiene 1 byte.

Suerte!!!!!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion

Publicado por fernando.gomez (1603 intervenciones) el 26/10/2006 00:53:51
Pero en tu ejemplo, mama es un caracter, no una función.

Según yo, el tamaño de una función está determinada por la firma más el tipo de dato de retorno. Pero la verdad no estoy 100% seguro.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Copiar una funcion

Publicado por Carlos (34 intervenciones) el 26/10/2006 03:09:37
Estás en lo cierto. Sólo era para que nuestro amigo entendiera el funcinamiento del comando sizeof
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion

Publicado por Tom (619 intervenciones) el 26/10/2006 08:32:57
Parece que tratas de hacer algo para aprovechar un buffer overflow ¿no? niño malo niño malo
Crea otra función justo a continuación de la que quieres evaluar, y luego resta las direcciones. Si tienes mucha, mucha suerte, esto funcionaría.

unsigned long tamanioProcedimiento(func, ftest) {
return(ftest - func);
}
/* */
void func() {
/* Aquí haremos algo luego */
}
void ftest() {
/* Funcion testigo, no haremos nada */
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion

Publicado por endless_loop (11 intervenciones) el 26/10/2006 14:39:34
Ahora... como me aseguro de que las funciones se compilen de forma consecutiva? El compilador siempre las pone juntas si yo las escribo juntas?

Grax :).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion

Publicado por Tom (619 intervenciones) el 26/10/2006 16:22:29
Por eso te digo que hace falta suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion????

Publicado por Fran (122 intervenciones) el 27/10/2006 14:15:00
No entiendo el porque de querer el tamaño de una funcion... es decir, aprendi que jamas hay que confiar en el tamaño que pueda ocupar una funcion... pero bueno... alguien me explica???
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion????

Publicado por [Endless_Loop] (11 intervenciones) el 27/10/2006 14:23:00
El tamaño.... en codigo :s.
Quiero saber como medir lo q pesa una funcion con todo su codigo.
Sencillamente eso...

En asm puedo:

funcionqquieroaveriguar:
push bp
mov bp,sp
..............
pop bp
ret ;aca terminaria
finfuncion:

Entonces podria juntar todos los bytes en el intervalo:

[funcionqquieroaveriguar ; finfuncion)

Y meterlo todo en un buffer de tamaño

(finfuncion - funcionqquieroaveriguar).


Se entiende?

Ahora el problema: como hago eso q en ASM es tan facil, en C?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar una funcion????

Publicado por fernando.gomez (1603 intervenciones) el 27/10/2006 18:44:17
Yo tampoco entiendo para qué quieren eso. Pero bueno.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar