Piszę programy w fasm, chciałbym się temu bardziej przyjrzeć.
Wpisałem takie coś:
section '.idata' import data readable writeable
sekcja: ;<- na koncu o tym napisze ;]
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x30, 0x00, 0x00
db 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, 0x33, 0x32, 0x2e, 0x64, 0x6c, 0x6c, 0x00, 0x00
db 0x38, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67
db 0x65, 0x42, 0x6f, 0x78, 0x41
A w segmencie kodu mam tak:
section '.code' code readable executable
push 0
push 0
push 0
push 0
db 0xFF, 0x15, 0x30, 0x30, 0x40, 0x00
ret
Program elegancko działa :-)
To znaczy wyskakuje komunikat(ShowMessageA).
0x00403000 to jest adres wirtualny do danych w segmencie .idata
I sie zgadza, bo pod adresem 0x0040300C jest wartość 0x24(załadowana z pliku)
Gdy zmodyfikuje wartość tą to powinnien być błąd przy wykonaniu tej instrukcji
db 0xFF, 0x15, 0x30, 0x30, 0x40, 0x00 (to jest "call ds:[0x00403030]")
A jednak nic się nie dzieje [???]
Próbowałem modyfikować dane "skekcja".
Co robie źle?