Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: GGZ en 21 Noviembre 2016, 18:05 pm



Título: ¿Funciones anidadas?
Publicado por: GGZ en 21 Noviembre 2016, 18:05 pm
Hola!, estuve buscando por internet pero todavía no me queda del todo claro, alguien sabe algo sobre funciones anidadas?


Algo como esto estoy buscando

Código
  1. void f( int a){
  2.  
  3.       int gg(char v){
  4.             return 1;
  5.      }
  6.       gg('b');
  7.  
  8. }
  9.  

Sí se que se lo puede pasar a ASM con gcc -S, de todos modos no entiendo los procedimientos que hace.


Saludos!


Título: Re: ¿Funciones anidadas?
Publicado por: xv0 en 21 Noviembre 2016, 20:11 pm
Quieres una traduccion en ASM?


Título: Re: ¿Funciones anidadas?
Publicado por: GGZ en 25 Noviembre 2016, 00:07 am
No, las diferentes formas de implementar funciones anidadas en ASM y la lógica de cada una de las implementaciones.
Si quisiera el código simplemente haría gcc -S ff.c, pero no es la única forma que hay de escribir funciones anidadas.


Título: Re: ¿Funciones anidadas?
Publicado por: MCKSys Argentina en 25 Noviembre 2016, 00:45 am
Quizás ésto (https://en.wikipedia.org/wiki/Nested_function) te pueda servir.

Saludos!


Título: Re: ¿Funciones anidadas?
Publicado por: GGZ en 25 Noviembre 2016, 03:45 am
No, ya lo había leído por arriba.


Título: Re: ¿Funciones anidadas?
Publicado por: xv0 en 25 Noviembre 2016, 16:39 pm
Código
  1. .section .text
  2. .globl ___f
  3.  
  4. ___f:
  5.  
  6. movb $0x62, %dil
  7. callq _gg
  8.  
  9. ;/////continuacion del code.... si no un ret
  10.  
  11. ret
  12.  
  13. _gg
  14.  
  15. movb $0x1, %al
  16. ret

o

Código
  1. .section .text
  2. .globl ___f
  3.  
  4. ___f:
  5.  
  6. jmp slt
  7.  
  8. __f2:
  9.  
  10. ; continuacion de code si no un ret
  11.  
  12. ret
  13.  
  14. _gg
  15.  
  16. movb $0x1, %al
  17. ret
  18.  
  19. slt:
  20.  
  21. movb $0x62, %dil
  22. callq _gg
  23.  
  24. jmp __f2

No se si quieres algo asi, se podria hacer de muchas maneras.

La funcion f puede estar donde quieras, la ejecucion empezara donde dice .globl, da igual que f este arriba o abajo del todo.

Un saludo.