Niedługo będzie 2 lata jak bawię się fasmem (najpierw 16b) i wciąż uważam, że jest za wcześnie na 64b ale każdy po swojemu powinien atakować problem. Tutaj masz na forum fasma przykład:
http://board.flatassembler.net/topic.php?t=11319
spróbuj. No co do korzystania z makr to nawet sam początek powiedzmy
format pe console
lub
format PE64 console
to jest swego rodzaju uproszczenie jeżeli nie chcesz z tego korzystać to twój kod musiał by mieć powiedzmy taką postać:
http://board.flatassembler.net/topic.php?t=14641
musiał byś ręcznie wszystkie nagłówki formatu PE wypełnić ... no można tylko po co.
makrodefinicje typu invoke, cinvoke, fastcall (w przypadku x64) są "nieszkodliwymi" uproszczeniami tzn takimi które nie powodują, nie mają żadnego wpływu na szybkość wykonania kodu za to rewelacyjnie poprawiają jego czytelność. Oczywiście nie zawsze można ich użyć i należy wiedzieć jak działają ponieważ niekiedy trzeba np pobrać adres funkcji ręcznie np:
...
section '.code' code readable writeable executable
text db 'example',0
start:
invoke LoadLibrary, 'user32.dll'
invoke GetProcAddress, eax, 'MessageBoxA'
push MB_YESNO
push text
push text
push HWND_DESKTOP
call eax
ret
To samo się tyczy sekcji importu - można ją ręcznie wypełniać z tym, że moim zdaniem zwłaszcza na początku nie ma co sobie zaciemniać obrazu - podam przykład:
50 raz od nowa próbujesz napisać programik np konwersji prezentacji danych z HEX na DEC ... i co za każdym razem będziesz wklepywał sekcję importu ręcznie, wypełniał nagłówki PE ... no oczywiście można a nawet kilka razy w życiu trzeba ale nie więcej i nie na początku nauki- takie jest moje zdanie.
Odnośnie debugera o którym piszesz luknołem i faktycznie wygląda na to, że jest tylko dla 64b. Jednak pobierz sobie AIDA Pro x86 - bardzo czytelny jest... ale nie używając debugera nie jesteś skazany na to żeby pisać 64b programy ... no ja w ogóle nie wiedziałem co to debuger na początku a trzeba było wiedzieć co jest w rejestrach co w pamięci, napisałem sobie pewną funkcję + macro które ją wywołuje i do dzisiaj z tego korzystam :) dużo bardziej poręczne niż analiza tego co wypluwa debager. Tutaj masz link do pliku codehelp.inc :
http://download.hellshare.pl/kodowanie/codehelp-rar/9407595/
możesz go użyć w ten sposób:
format pe gui 4.0
entry start
include 'win32ax.inc'
include 'codehelp.inc' ; w ten sposob includujesz plik który ci podsyłam
section '.code' code readable writeable executable
wartosc dd 0FFFFFFFFh
start:
show dword [wartosc], 'wartosc'
mov eax, 01
show eax, 'zawartosc rejestru eax'
show start, 'virtualny adres etykiety start:'
show RVA start, 'relatywny adres etykiety start:'
show (start - RVA start), 'ImageBase:'
invoke GetFileAttributes, 'c:\nie ma takiego pliku.exe'
SHOWERROR 'Funkcja get GetFileAttributes() zakonczyla sie błędem:'
ret
Jak widzisz plik ten zawiera również macrodefinicje SHOWERROR - również bardzo pomocna jest.
W ogóle to podstawowy problem jaki spotykają wszyscy na początku nauki asma "jak zobaczyć co jest w rejestrach, co w pamięci" dla tego wrzucam ten plik.
PS. Gdzieś widziałem na jakimś forum wyrażenie "dzieci invoke" (pogardliwie). No jakoś nie potrafię znaleźć uzasadnienia dla czego niby tego nie stosować ??? nie mam zajawek grafomańskich ani masochistycznych więc po co sobie utrudniać życie. Ogólnie uważam, że to cecha nowoczesnych asemblerów, że niektóre prace wykonuje za nas kompilator na szczęście od jakiegoś czasu okienkowy.