Advertisement
JeffClinton

Il capostipite dei buffers overflow

May 28th, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.66 KB | None | 0 0
  1. ESECUZIONE ARRAY
  2.  
  3. La vecchia metodologia dell' inline del Turbo Pascal e'
  4. applicabile anche con il C mediante l'esecuzione di un array.
  5. Stavo scrivendo un testo sull'aritmetica degli indirizzi per
  6. un corso che dovro tenere tra qualche mese.
  7. Tra i vari cast che sono possibili in C mi e' sorto un
  8. dubbio.
  9. Se assegni l'indirizzo di un array a un puntatore a funzione
  10. e chiami la funzione che cosa capita ?
  11. In pratica: traduci un codice assembler in esadecimale,
  12. assegna i valori a un array, assegna l'indirizzo dell'array a un
  13. puntatore a funzione mediante un cast e chiama la funzione.
  14. Esempio:
  15.  
  16. unsigned char far array[] = {
  17. /* ---- [CODICE DI BOOT.COM] ---- */
  18. 0xFB,0x31,0xDB, /* FB STI */
  19. 0x8E,0xDB,0xBB, /* 31DB XOR BX,BX */
  20. 0x72,0x04,0xB8, /* 8EDB MOV DS,BX */
  21. 0x34,0x12,0x89, /* BB7204 MOV BX,0472 */
  22. 0x07,0xEA,0x00, /* B83412 MOV AX,1234 */
  23. 0x00,0xFF,0xFF /* 8907 MOV [BX],AX */
  24. /* EA0000FFFF JMP FFFF:0000 */
  25. /* ------------------------------- */
  26. };
  27.  
  28. void main(void)
  29. {
  30. void (far *funct)() = (void(far *)()) array;
  31. (*funct)();
  32. }
  33.  
  34. Ho provato anche mediante assegnazione da programma in
  35. esecuzione e funziona.
  36. Supponiamo di dover creare una funzione che esegua un JMP (jump)
  37. a un indirizzo assuloto composto da segmento e dall'offset.
  38. Utilizzando il metodo dell'esecuzione degli array potremmo fare:
  39.  
  40. #define JMPCODE 0xEA /* Codice esa di JMP FAR */
  41. #define NULL 0x00
  42.  
  43. void jump(unsigned segment,unsigned offset)
  44. {
  45. static unsigned char instruct[5] = { JMPCODE,
  46. NULL,
  47. NULL,
  48. NULL,
  49. NULL
  50. };
  51. void (far *funct)() = (void (far *)()) instruct;
  52. (*((unsigned *) &instruct[1])) = offset;
  53. (*((unsigned *) &instruct[3])) = segment;
  54. (*funct)();
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement