Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: GGZ en 21 Noviembre 2016, 01:58 am



Título: [C-ASM] Pila
Publicado por: GGZ en 21 Noviembre 2016, 01:58 am
¿Podrían explicarme un poco mejor como es que funciona stack y hacer_stack?
Código
  1. #include <stdlib.h>
  2. #include <setjmp.h>
  3.  
  4. #define TPILA 4096
  5. #define NPILAS 10
  6.  
  7. static void hace_stack(jmp_buf buf, void (*pf)(), unsigned prof, char *dummy) {
  8.  
  9.        printf ("prof: %d\n",prof);
  10.        printf ("dummy: %d\n",dummy-(char*) &prof );
  11.  
  12.  
  13.        if( dummy - (char *) &prof >= prof) {
  14.                if (setjmp(buf)!=0) {
  15.                        pf(); abort();
  16.                }
  17.        } else hace_stack(buf, pf, prof, dummy);
  18. }
  19.  
  20. void stack(jmp_buf buf, void (*pf)()) {
  21.        static int ctas = NPILAS;
  22.        char dummy;
  23.        hace_stack(buf, pf, TPILA*ctas, &dummy);
  24.        ctas--;
  25. }
  26.  

Código
  1. #include <stdio.h>
  2. #include "guindows.h"
  3.  
  4. task t1, t2, taskmain;
  5.  
  6. void ft1(){
  7. double d;
  8. for(d=-1;;d+=0.001) {
  9. printf("d=%f\n", d);
  10. TRANSFER(t1,t2);
  11. }
  12. }
  13.  
  14. void ft2(){
  15. int i;
  16. for(i=0;i<10000;i++) {
  17. printf("i=%d\n", i);
  18. TRANSFER(t2,t1);
  19. }
  20. TRANSFER(t2, taskmain);
  21. }
  22.  
  23. main(){
  24. stack(t1,ft1);
  25. stack(t2,ft2);
  26. TRANSFER(taskmain,t1);
  27. return 0;
  28. }
  29.  


¿Para qué carajos sirve esto?
Código
  1.        if( dummy - (char *) &prof >= prof) {
  2.                if (setjmp(buf)!=0) {
  3.                        pf(); abort();
  4.                }
  5.        } else hace_stack(buf, pf, prof, dummy);

Me parece una forma muy rara de codear (char *)&prof sé lo que significa pero no entiendo para que sirve.

Todo lo de guindows.h lo entiendo.