puntero a funcion

Iniciado por xiruko, 3 Septiembre 2012, 21:55 PM

0 Miembros y 5 Visitantes están viendo este tema.

xiruko

acabo de buscar lo que era cygwin ya que no tenia ni idea. bueno yo estoy con mac os 64bit y con gcc. puede ser que ese programa sea para 32bits, lastima que no tenga ni idea de que es lo que cambia de una a otra a parte de un poco de teoria xD

en fin, al menos se que funcionar funciona, voy a buscar por ahi a ver que encuentro.

avesudra

Cita de: xiruko en  4 Septiembre 2012, 02:04 AM
acabo de buscar lo que era cygwin ya que no tenia ni idea. bueno yo estoy con mac os 64bit y con gcc. puede ser que ese programa sea para 32bits, lastima que no tenga ni idea de que es lo que cambia de una a otra a parte de un poco de teoria xD

en fin, al menos se que funcionar funciona, voy a buscar por ahi a ver que encuentro.
Nah ni yo tengo cygwin lo he utilizado algunas veces para tutoriales de compilar librerías y eso pero bah, puedes ser pero lo que me parece muy muy extraño es que me funcione tanto tu código como el de la web, porque tienen valores diferentes.
Regístrate en

xiruko

entonces el mio te funciona?? es bueno saberlo, aunque si que es raro raro que te funcionen los dos codigos. yo me habia hecho el mio ya que al ser diferente plataforma preferi hacermelo antes que usar el suyo. pero si te funcionan los dos... pff no tengo ni idea de nada la verdad xD

a ver si se pasa alguien y nos puede iluminar un poco.

avesudra

#13
Si mira la salida la tienes abajo, yo creo que me estoy metiendo demasiado sin saber , pero lo mismo no es que sea un segmentation fault , si no que no tiene permisos de ejecución en esa zona de memoria... Cógete un debugger, y analiza el código(El ida por ejemplo en http://www.hex-rays.com/products/ida/support/download_freeware.shtml) o el gdb es un debugger en ASM , así puedes ver por donde va.
Valor inicial: 1
Valor cambiado: 5

Process returned 0 (0x0)   execution time : 0.011 s
Press any key to continue.
Regístrate en

xiruko

ya lo hice antes, pero la verdad no se que buscar. quiero decir que si, veo que el programa peta en el momento de: pfn=&codigo[0], y dice que no tiene acceso a esa zona de memoria (vamos, lo que es un seg fault). eso si declaro la variable local dentro del main. en cambio, si la declaro global el error que me da es bus error.

la verdad que ni idea... estoy buscando informacion pero cada nueva web que miro, todo es nuevo para mi y me pierdo al momento. pero bueno, ya tenia ganas de aprender algo nuevo en c que me llamara la atencion asi que a ello voy... algun dia volvere con la respuesta. espero no tardar mucho :D

avesudra

Cita de: xiruko en  4 Septiembre 2012, 02:38 AM
ya lo hice antes, pero la verdad no se que buscar. quiero decir que si, veo que el programa peta en el momento de: pfn=&codigo[0], y dice que no tiene acceso a esa zona de memoria (vamos, lo que es un seg fault). eso si declaro la variable local dentro del main. en cambio, si la declaro global el error que me da es bus error.

la verdad que ni idea... estoy buscando informacion pero cada nueva web que miro, todo es nuevo para mi y me pierdo al momento. pero bueno, ya tenia ganas de aprender algo nuevo en c que me llamara la atencion asi que a ello voy... algun dia volvere con la respuesta. espero no tardar mucho :D
Ya ya pero con uno en assembler puedes ver en que instrucción peta, bueno a ver si vienen algunos expertos por este post jajaja, te dejo las capturas en asm del OllyDbg de tu código:
Zona de printfs:

Primera llamada:

Segunda llamada:

Regístrate en

fary

Cita de: avesudra en  4 Septiembre 2012, 02:46 AM
Ya ya pero con uno en assembler puedes ver en que instrucción peta, bueno a ver si vienen algunos expertos por este post jajaja, te dejo las capturas en asm del OllyDbg de tu código:
Zona de printfs:

Primera llamada:

Segunda llamada:



El problema es que el está en mac, para windows creo que sobraría con dar permisos PAGE_EXECUTE_READWRITE Con la API VirtualProtect a la parte de memoría que queremos modificar en tiempo de ejecución.

saludos.
Un byte a la izquierda.

avesudra

Cita de: mDrinky en  4 Septiembre 2012, 11:40 AM
El problema es que el está en mac, para windows creo que sobraría con dar permisos PAGE_EXECUTE_READWRITE Con la API VirtualProtect a la parte de memoría que queremos modificar en tiempo de ejecución.

saludos.
Lo sé pero el caso es que a mí me funciona perfectamente, es curioso , es que esa parte de memoria es solo para ser leída y escribida nada más ¿no mDrinky? y no ejecutada.
Regístrate en

fary

Cita de: avesudra en  4 Septiembre 2012, 13:25 PM
Lo sé pero el caso es que a mí me funciona perfectamente, es curioso , es que esa parte de memoria es solo para ser leída y escribida nada más ¿no mDrinky? y no ejecutada.
No, esa parte es de ejecucion. Pero para poder modificarla tienes que tener derecho de escritura. 
Un byte a la izquierda.

avesudra

Cita de: mDrinky en  4 Septiembre 2012, 14:42 PM
    No, esa parte es de ejecucion. Pero para poder modificarla tienes que tener derecho de escritura. 
Pero si es un array de char , ¿que menos que pueda ser modificado no?No lo entiendo :xD además si a mi me funciona , me deberia echar para atras por no poder escribir ¿no? Es curioso...
Regístrate en