ik heb in c een simpele for loop geschreven en deze gedissambled
nu is mij vraag wat die SUB ESP, 8 & AND ESP,FFFFFFF0 nou voor nut hebben, wat doen ze, want deel is het enige wat ik niet echt snap.
bij het opslaan van de variable gebruiken ze MOV DWORD PTR SS:[EBP-8],EAX, waarom is het EBP-8.
ALs iemand me dat kan uitleggen zou dat het super zijn
al vast bedankt
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| 00401288 /$ 55 PUSH EBP ; sla base pointer op in stack 00401289 |. 89E5 MOV EBP,ESP ; sla stack pointer op in base pointer 0040128B |. 83EC 08 SUB ESP,8 ; ESP = ESP - 8 0040128E |. 83E4 F0 AND ESP,FFFFFFF0 ; ESP = ESP && FFFFFFF0 00401291 |. B8 00000000 MOV EAX,0 ; initialiseer variable op 0 00401296 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX ; sla EAX(= 0) op 00401299 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; EAX = 0 0040129C |. E8 CF160000 CALL for_loop.00402970 004012A1 |. E8 0A010000 CALL for_loop.004013B0 004012A6 |. C745 FC 000000>MOV DWORD PTR SS:[EBP-4],0 ; DWORD PTR SS:[EBP-4] = 0 004012AD |> 837D FC 0A /CMP DWORD PTR SS:[EBP-4],0A ; vergelijk met 10 004012B1 |. 7E 02 |JLE SHORT for_loop.004012B5 ; if < 10 ga naar 004012B5 004012B3 |. EB 1A |JMP SHORT for_loop.004012CF ; einde for loop 004012B5 |> 83EC 08 |SUB ESP,8 ; ESP = ESP - 8 004012B8 |. FF75 FC |PUSH DWORD PTR SS:[EBP-4] ; sla variable op 004012BB |. 68 80124000 |PUSH for_loop.00401280 ; format = "a = %i" 004012C0 |. E8 5B170000 |CALL <JMP.&msvcrt.printf> ; roep printf op 004012C5 |. 83C4 10 |ADD ESP,10 ; ESP = ESP + 16 004012C8 |. 8D45 FC |LEA EAX,DWORD PTR SS:[EBP-4] ; laad adres variable 004012CB |. FF00 |INC DWORD PTR DS:[EAX] ; variable += 1 004012CD |.^EB DE \JMP SHORT for_loop.004012AD ; terug naar loop 004012CF |> B8 00000000 MOV EAX,0 ; EAX = 0; 004012D4 |. C9 LEAVE 004012D5 \. C3 RETN ; Einde Programma |
nu is mij vraag wat die SUB ESP, 8 & AND ESP,FFFFFFF0 nou voor nut hebben, wat doen ze, want deel is het enige wat ik niet echt snap.
bij het opslaan van de variable gebruiken ze MOV DWORD PTR SS:[EBP-8],EAX, waarom is het EBP-8.
ALs iemand me dat kan uitleggen zou dat het super zijn
al vast bedankt