Assembly nie rozumiem 1 rzeczy

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0
Kopiuj
[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:

Kopiuj
add dword [esp], dane-n

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

  • Rejestracja: dni
  • Ostatnio: dni
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:

Kopiuj
 
char *addr_dane = dane; 
void ((*addr_n)()) = n;
void *addr_esp; //cos tam juz jest
*addr_esp += (void *)addr_dane - (void *)addr_n;
FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 18
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.