Test Foro de elhacker.net SMF 2.1

Programación => Programación General => 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

void f( int a){

      int gg(char v){
            return 1;
     }
      gg('b');

}


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: cpu2 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: cpu2 en 25 Noviembre 2016, 16:39 PM
Código (asm) [Seleccionar]
.section .text
.globl ___f

___f:

movb $0x62, %dil
callq _gg

;/////continuacion del code.... si no un ret

ret

_gg

movb $0x1, %al
ret


o

Código (asm) [Seleccionar]
.section .text
.globl ___f

___f:

jmp slt

__f2:

; continuacion de code si no un ret

ret

_gg

movb $0x1, %al
ret

slt:

movb $0x62, %dil
callq _gg

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.