Czytam książkę Inżynieria odwrotna w praktyce
jako tako asemblera znam, przynajmniej tak myślałem, ale asembler stosowany w tej książce ma parę "dziwnych" szczegółów np.
w książce mamy taki fragment kodu:
01: 8B 45 0C mov eax, [ebp+0Ch]
02: 83 61 1C 00 and dword ptr [ecx+10h], 0
03: 89 41 0Ch mov ecx+0Ch], eax
04: 8b 45 10 mov eax, [ebp+10h]
05: C7 01 13 01 00+ mov dword ptr [ecx], 113h
06: 89 41 10 mov [ecx+10h], eax
i teraz pytania
1) czy te numerki na początku każdej lini są obowiązkowe? w innych miejscach autorzy ich nie stosują, czy to są tylko zaznaczenia numerów lini które kodzie nie występują?
2) drugiej lini mamy coś takiego dword ptr to chyba zaznaczenie żę dane będą typu double word, tylko co to jest ptr i dlaczego czasem jest a czasem nie?
3) druga linia zeruje to co jest zapisane w ramie pod adresem ecx + 10h, czyli ecx dodać 16
zeruje instrukcją and, bo cokolwiek przepuszczone przez and'a gdzie drugim parametrem jest 0 da 0,
czasem można spotkać się z zapisem
xor ecx, ecx
i to też wiadomo bo ta sama wartość na obu wejściach xor'a da zawsze 0
pytanie dlaczego używamy and ecx, 0 lub xor ecx, ecx zamiast mov ecx, 0?
to chyba logiczniejsze?
4) w każdej lini, po oznaczeniu numeru lini ale przed instrukcjami mamy jakieś liczby w szesnastkowym, co to?
np C7 01 13 01 00+
widzę pewne zależności między nimi a instrukcjami, ale wolę wiedzieć na pewno, używamy ich w kodzie?
5) na drugiej stronie w książce mamy wyjaśnione w postaci tabeli że liczbę 113h z 5 linii komputer przedstawia binarnie jako
00000000 00000000 | 00000001 | 000100111
Liczba |Waga | Typ
i teraz pytanie przecież liczba 0x113 to liczba 275dec czyli binarnie 100010011
więc widać że w polu Waga mamy pierszą cyfrę z tej liczby (1)
a reszta jest polu typ,
i teraz pytanie po co są te pola? w sensie po co jest np. liczba itp. to jakiś standard zapisu liczb? jeśli tak to jaki?