Assembly nie rozumiem 1 rzeczy

0
[bits 32]

call n
n:
pop eax

push eax
add dword [esp], dane-n
call [ebx+3*4]
add esp, 4
push 0
call [ebx]

dane:
db "Hello World!", 0xA, 0

Uczę się z kursu GynvaelColdwind'a i nie rozumiem co się dzieje tu:

add dword [esp], dane-n

Nie rozumiem co się dzieje przy odejmowaniu i do czego się odwołujemy stosując te nawiasy kwadratowe.

1

dane - n <-- Odejmujesz adres (w wolnym rozumowaniu), label'a "dane:" od adresu labela "n:".
dodajesz do wartosci z pod adresu, na który wskazuje esp, powyższy wynik.

Czyli na język C podobny:

 
char *addr_dane = dane; 
void ((*addr_n)()) = n;
void *addr_esp; //cos tam juz jest
*addr_esp += (void *)addr_dane - (void *)addr_n;
0

Akurat przed chwilą nagle mi się wszystko rozjaśniło i zrozumiałem, ale dzięki za ten kod w C.

1 użytkowników online, w tym zalogowanych: 0, gości: 1