No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

80 líneas
1.3KB

  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #include "misc.h"
  4. #include "hook.h"
  5. #if 0
  6. Check whether trampoline works correctly
  7. start:
  8. je lbl1
  9. jmp lbl1
  10. lbl1:
  11. ---
  12. hook() == LOOPS_INTO_OVERWRITTEN_CODE
  13. start:
  14. mov eax, 3
  15. l:
  16. dec eax
  17. test eax, eax
  18. je l
  19. #endif
  20. static int test(int a, int b);
  21. static void normal(int a, int b, int c, int d, int e);
  22. static void normal2(int a, int b, int c, int d, int e);
  23. typedef void(*FUNCTYPE)(int a, int b, int c, int d, int e);
  24. static void hooked(int a, int b, int c, int d, int e);
  25. static FUNCTYPE original;
  26. int main(int argc, char** argv)
  27. {
  28. int r = 0;
  29. if((r = hook(normal2, 0, hooked, &original)) < 0)
  30. {
  31. printf("CAn't hook: %d\n", r);
  32. return 1;
  33. }
  34. printf("---\nDisass. trampoline/original\n");
  35. disassemble_func(original, 10);
  36. original(3, 1, 1, 1, 1);
  37. //original(5, 1, 1, 1, 1);
  38. VirtualFree(original, 0, MEM_RELEASE);
  39. (void)getc(stdin);
  40. }
  41. static int test(int a, int b)
  42. {
  43. if(a == 0)
  44. return 5;
  45. else if(a == 1)
  46. return b;
  47. return a;
  48. }
  49. static void normal(int a, int b, int c, int d, int e)
  50. {
  51. printf("Result: %d\n", a*b*c*d*e);
  52. }
  53. static void normal2(int a, int b, int c, int d, int e)
  54. {
  55. if(a == 3)
  56. return;
  57. printf("Result: %d\n", a*b*c*d*e);
  58. }
  59. static void hooked(int a, int b, int c, int d, int e)
  60. {
  61. original(1, b, c, d, e);
  62. }