; Program wypisuje wartosci 32-bitowych rejestrow procesora jakie sa tuz po ; uruchomieniu programu ; ; autor: Bogdan D. ; kontakt: bogdandr (at) op (dot) pl ; ; nasm -O999 -f elf rej32.asm ; ld -s -o rej32 rej32.o ; ; Copyright (C) 2005-2007 Bogdan 'bogdro' Drozdowski, bogdandr @ op . pl ; ; Ten program jest wolnym oprogramowaniem; mozesz go rozpowszechniac ; i/lub modyfikowac zgodnie z licencja GNU Lesser General Public License ; (GNU LGPL) w wersji wydanej przez Fundacje Wolnego Oprogramowania; ; wedlug wersji 3 Licencji lub (jesli wolisz) jednej z pozniejszych wersji. ; ; Ten program jest udostepniany z nadzieja, ze bedzie uzyteczny, lecz ; BEZ JAKIEJKOLWIEK GWARANCJI; nawet domyslnej gwarancji PRZYDATNOSCI ; HANDLOWEJ albo PRZYDATNOSCI DO OKRESLONYCH ZASTOSOWAN. W celu uzyskania ; blizszych informacji - Licencja GNU Lesser General Public License. ; ; Z pewnoscia wraz z niniejszym programem otrzymales tez egzemplarz ; Licencji GNU Lesser General Public License; jesli nie - napisz do ; Fundacji Wolnego Oprogramowania: ; Free Software Foundation ; 51 Franklin Street, Fifth Floor ; Boston, MA 02110-1301 ; USA section .text global _start _start: jmp short kod adres dd $-2 kod: push eax mov eax,[adres] mov [t_rej+60], eax ; zapisujemy EIP poczatku programu pop eax mov [t_rej+52], esp mov [t_rej+0], eax ; prawdziwy eax pushfd pop eax mov [t_rej+56], eax ; flagi mov [t_rej+4] , ebx mov [t_rej+8] , ecx mov [t_rej+12], edx mov [t_rej+16], cs mov [t_rej+20], ds mov [t_rej+24], es mov [t_rej+28], ss mov [t_rej+32], fs mov [t_rej+36], gs mov [t_rej+40], esi mov [t_rej+44], edi mov [t_rej+48], ebp xor esi, esi ; =========================== ; teraz po kolei wyswietlamy wpisy z tablicy ; biezace miejsce wskazuje ESI. mov eax, 4 mov ebx, 1 mov ecx, piszeax mov edx, 4 int 80h xor esi, esi call piszrej mov eax, 4 mov edx, 5 mov ecx, piszebx int 80h mov esi, 4 call piszrej mov eax, 4 mov ecx, piszecx int 80h mov esi, 8 call piszrej mov eax, 4 mov ecx, piszedx int 80h mov esi, 12 call piszrej mov eax, 4 mov ecx, piszcs int 80h mov si, 16 call piszrej mov eax, 4 mov ecx, piszds int 80h mov si, 20 call piszrej mov eax, 4 mov ecx, piszes int 80h mov si, 24 call piszrej mov eax, 4 mov ecx, piszss int 80h mov si, 28 call piszrej mov eax, 4 mov ecx, piszfs int 80h mov si, 32 call piszrej mov eax, 4 mov ecx, piszgs int 80h mov si, 36 call piszrej mov eax, 4 mov ecx, piszesi int 80h mov si, 40 call piszrej mov eax, 4 mov ecx, piszedi int 80h mov si, 44 call piszrej mov eax, 4 mov ecx, piszebp int 80h mov si, 48 call piszrej mov eax, 4 mov ecx, piszesp int 80h mov si, 52 call piszrej mov eax, 4 mov ecx, piszeip int 80h mov si, 60 call piszrej mov eax, 4 mov ecx, piszfl mov edx, 7 int 80h mov si,56 call piszrej mov ecx, piszfl mov edx, 1 mov eax, 4 mov ebx, 1 int 80h ; znak nowej linii mov eax, 1 xor ebx, ebx int 80h ; wyjscie z programu ; ================================ ; procedura wypisujaca wartosc pola ; z tablicy, wskazywanego przez ESI piszrej: push eax push ebx push ecx push edx mov ebx, [t_rej+esi] ; pobierz wartosc do wyswietlenia ; wyswietlamy po 4 bity, idac od gory: mov eax, ebx shr eax, 28 call pc ; wyswietlamy bity 28-31 mov eax, ebx shr eax, 24 and al, 0fh call pc ; wyswietlamy bity 24-27 mov eax, ebx shr eax, 20 and al, 0fh call pc mov eax, ebx shr eax, 16 and al, 0fh call pc mov eax, ebx shr eax, 12 and al, 0fh call pc mov eax, ebx shr eax, 8 and al, 0fh call pc mov eax, ebx shr eax, 4 and al, 0fh call pc mov eax, ebx and al, 0fh call pc ; ostatnie 4 bity pop edx pop ecx pop ebx pop eax ret ; ========================= ; procedura wyswietlajaca cyfre z AL: 0-9 lub A-F pc: push eax push ebx push ecx push edx cmp al, 9 ; sprawdzamy, czy 0-9 ja hex or al, '0' ; jesli tak, to zamieniamy na '0'-'9' jmp short pz hex: add al, 'A'-10 ; jesli nie, to zamieniamy na 'A'-'F' pz: mov [cyfra], al ; zapisujemy wynik do wyswietlenia mov eax, 4 ; funkcja zapisu do pliku mov ebx, 1 ; plik=1 = standardowe wyjscie mov ecx, cyfra ; tutaj sa dane do wypisania mov edx, 1 ; tyle bajtow wypisac int 80h ; wyswietlamy cyfre pop edx pop ecx pop ebx pop eax ret ; ----------------------------------------------- section .data t_rej times 16 dd 0 lf equ 10 piszeax db "EAX=" piszebx db lf, "EBX=" piszecx db lf, "ECX=" piszedx db lf, "EDX=" piszcs db lf, "CS= " piszds db lf, "DS= " piszes db lf, "ES= " piszfs db lf, "FS= " piszgs db lf, "GS= " piszss db lf, "SS= " piszedi db lf, "EDI=" piszesi db lf, "ESI=" piszebp db lf, "EBP=" piszesp db lf, "ESP=" piszeip db lf, "EIP=" piszfl db lf, "Flagi=" cyfra db 0