Thread View: pl.comp.lang.asm
17 messages
17 total messages
Started by Matuzalem
Tue, 22 Aug 2006 23:20
mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Tue, 22 Aug 2006 23:20
Date: Tue, 22 Aug 2006 23:20
71 lines
2298 bytes
2298 bytes
Witam ;================================================= title API includelib IMPORT32.LIB .386P .model flat, stdcall ;------------------------------------------- STD_OUTPUT_HANDLE equ -11 extern lstrlenA:near extern GetStdHandle:near extern WriteConsoleA:near extern ExitProcess:near lstrlen = lstrlenA WriteConsole = WriteConsoleA ;------------------------------------------- segment _DATA infomsg db "API", 0 hcon dd ? bytew dd 0 ends _DATA ;------------------------------------------- segment _TEXT start: push STD_OUTPUT_HANDLE call GetStdHandle mov hcon, eax push offset infomsg call lstrlen push 0 push bytew push eax push offset infomsg push hcon call WriteConsole mov ah, 0 int 16h push 0 call ExitProcess ends _TEXT end start ;================================================= Troche sie stesknilem za windows-owym API i postanowilem cos naskrobac :P No i naskrobalem blad w postaci wywalenia programu... Gdy czesc kodu "mov ah, 0/int 16h" wezme jako komentarz i skompiluje wszystko jest ok. Jednak gdy zostawie to wywala blad. Czemu? Ma to cos wspulnego z modelem pamieci? (raczej nie, prawda?) TASM Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Bogdan (bogdro)
Date: Wed, 23 Aug 2006 08:30
Date: Wed, 23 Aug 2006 08:30
62 lines
2576 bytes
2576 bytes
Matuzalem napisał(a): > Witam > > ;================================================= > title API > > includelib IMPORT32.LIB > > .386P > .model flat, stdcall [...] > > mov ah, 0 > int 16h > > push 0 > call ExitProcess > > ends _TEXT > end start > ;================================================= > > Troche sie stesknilem za windows-owym API i postanowilem cos > naskrobac :P > No i naskrobalem blad w postaci wywalenia programu... > Gdy czesc kodu "mov ah, 0/int 16h" wezme jako komentarz i skompiluje > wszystko jest ok. > Jednak gdy zostawie to wywala blad. > Czemu? > Ma to cos wspulnego z modelem pamieci? (raczej nie, prawda?) Nie, ale z trybem działania procesora - owszem. Jak piszesz program 32-bitowy pod Windows, to formalnie wszelkie przerwania są zabronione. Kod BIOSu jest w większości 16-bitowy, więc i tak by sypnął program. Dlatego nie utworzono bramek umożliwiających korzystanie z funkcji BIOSu. Smutna prawda. Używaj tylko WinAPI. > TASM format PE include '%fasminc%/win32axp.inc' .code start: invoke GetStdHandle, STD_OUTPUT_HANDLE ... invoke WriteConsole, [hcon], infomsg, eax, [bytew], 0 ... invoke ExitProcess, 0 .end start Żadnych includelib, extern, wybierania wersji A czy W, tylko 1 include. Kwestia przyzwyczajenia. FASM :) -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Wed, 23 Aug 2006 09:45
Date: Wed, 23 Aug 2006 09:45
72 lines
2998 bytes
2998 bytes
Bogdan (bogdro) napisal(a): > Matuzalem napisal(a): > > Witam > > > > ;================================================= > > title API > > > > includelib IMPORT32.LIB > > > > .386P > > .model flat, stdcall > > [...] > > > > mov ah, 0 > > int 16h > > > > push 0 > > call ExitProcess > > > > ends _TEXT > > end start > > ;================================================= > > > > Troche sie stesknilem za windows-owym API i postanowilem cos > > naskrobac :P > > No i naskrobalem blad w postaci wywalenia programu... > > Gdy czesc kodu "mov ah, 0/int 16h" wezme jako komentarz i skompiluje > > wszystko jest ok. > > Jednak gdy zostawie to wywala blad. > > Czemu? > > Ma to cos wspulnego z modelem pamieci? (raczej nie, prawda?) > > Nie, ale z trybem dzialania procesora - owszem. Jak piszesz program > 32-bitowy pod Windows, to formalnie wszelkie przerwania sa zabronione. > Kod BIOSu jest w wiekszosci 16-bitowy, wiec i tak by sypnal program. > Dlatego nie utworzono bramek umozliwiajacych korzystanie z funkcji > BIOSu. Smutna prawda. Uzywaj tylko WinAPI. ehh no to Pure API :) > > TASM > > format PE > include '%fasminc%/win32axp.inc' > > .code > > start: > invoke GetStdHandle, STD_OUTPUT_HANDLE > ... > invoke WriteConsole, [hcon], infomsg, eax, [bytew], 0 > ... > invoke ExitProcess, 0 > > .end start > > Zadnych includelib, extern, wybierania wersji A czy W, tylko 1 > include. Kwestia przyzwyczajenia. FASM :) Wiesz te invoke jakos call to ladniej brzmi i te przecinki wole push-owac w tedy czuje, ze mam wladze nad stosm - chociaz tu i tak sie to samo generuje, to tak jakbym uzywal HAL-owych komend. :P:D:D ( to tylko zart :P) Bogdan dzieki za wytlumaczenie :] > -- > Pozdrawiam, Bogdan Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Remek
Date: Wed, 23 Aug 2006 16:29
Date: Wed, 23 Aug 2006 16:29
10 lines
1233 bytes
1233 bytes
> 32-bitowy pod Windows, to formalnie wszelkie przerwania są zabronione. > Kod BIOSu jest w większości 16-bitowy, więc i tak by sypnął program. Widziałem programy 32 bit pod Win32 używające int16h. Nawet mam jeden taki na dysku. To chyba jedno z nielicznych przerwań, którego można użyć pod Windows. -- Remek
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Wed, 23 Aug 2006 19:50
Date: Wed, 23 Aug 2006 19:50
20 lines
1805 bytes
1805 bytes
Remek napisal(a): > > 32-bitowy pod Windows, to formalnie wszelkie przerwania sa > zabronione. > > Kod BIOSu jest w wiekszosci 16-bitowy, wiec i tak by sypnal program. > > Widzialem programy 32 bit pod Win32 uzywajace int16h. Nawet mam jeden > taki na dysku. To chyba jedno z nielicznych przerwan, którego > mozna uzyc pod Windows. > > -- > Remek Yyy to badz tak uprzejmy i wytlumacz mi, czemu mnie ten program nie dziala, dopiero jak "skomentuje" int 16h dziala poprawnie... Jakbys mógl zamiescic ten kodzik - co masz na dysku - to bylbym wdzieczny... Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Remek
Date: Wed, 23 Aug 2006 22:24
Date: Wed, 23 Aug 2006 22:24
19 lines
1344 bytes
1344 bytes
> Jakbys mógl zamiescic ten kodzik Calego kodu Ci nie podam, poniewaz mam program bez zródla. Jesli chcesz moge Ci go podeslac na priv i zdisasembluj. Znajdziesz ten kawalek z wywolaniem przerwania i obejrzysz jak jest zrobione. Kawalek Ci napisze: mov ah, 02 int 16h and al, 40h ..... dalej jest skok warunkowy itd. -- Remek
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Wed, 23 Aug 2006 23:46
Date: Wed, 23 Aug 2006 23:46
10 lines
1558 bytes
1558 bytes
Remek napisal(a): > > Jakbys mógl zamiescic ten kodzik > > Calego kodu Ci nie podam, poniewaz mam program bez zródla. > Jesli chcesz moge Ci go podeslac na priv i zdisasembluj. Bylbym bardzo wdzieczny... dzieki Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Thu, 24 Aug 2006 11:08
Date: Thu, 24 Aug 2006 11:08
29 lines
2053 bytes
2053 bytes
Remek napisal(a): > > Jakbys mógl zamiescic ten kodzik > > Calego kodu Ci nie podam, poniewaz mam program bez zródla. > Jesli chcesz moge Ci go podeslac na priv i zdisasembluj. > Znajdziesz ten kawalek z wywolaniem przerwania i obejrzysz > jak jest zrobione. > > Kawalek Ci napisze: > > mov ah, 02 > int 16h > and al, 40h > > ..... > > dalej jest skok warunkowy itd. > > -- > Remek Niestety owy program - tak jak mój - zacina sie i wywala blad. Np. OllyDbg podaje to jako wyjatek którego nie moze wykonac (automatycznie terminuje proces). IDA jest podobnego zdania. Jednakze program dziala poprawnie na Windows 98SE natomiast na wszystkich w zwyz nie (na Viscie nie testowalem :] ) Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Remek
Date: Mon, 28 Aug 2006 09:24
Date: Mon, 28 Aug 2006 09:24
10 lines
1383 bytes
1383 bytes
> program dziala poprawnie na Windows 98SE natomiast na > wszystkich w zwyz nie Czytalem gdzies (nie podam Ci teraz linku), ze wywolywanie przerwan w NT-kach jest mozliwe, ale wyglada nieco inaczej. Jak znajde ten material, odezwe sie. O przerwaniach poczytaj na stronie Bogdana. -- Remek
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Mon, 28 Aug 2006 10:38
Date: Mon, 28 Aug 2006 10:38
20 lines
2018 bytes
2018 bytes
Remek napisal(a): > > program dziala poprawnie na Windows 98SE natomiast na > > wszystkich w zwyz nie > > Czytalem gdzies (nie podam Ci teraz linku), ze wywolywanie > przerwan w NT-kach jest mozliwe, ale wyglada nieco inaczej. > Jak znajde ten material, odezwe sie. Z tego co ja wiem przerywania w NT nie sa juz mozliwe z powodu braku czystego DOS-a (ale czy tak jest ?) wiec jakbys znalazl to bylbym wdzieczny. > O przerwaniach poczytaj na stronie Bogdana. Akurat przerywania to ja znam... :) (oczywiscie nie wszystkie :P ) ( http://www.ctyme.com/intr/int.htm ) Dzieki Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Bogdan (bogdro)
Date: Mon, 28 Aug 2006 13:20
Date: Mon, 28 Aug 2006 13:20
30 lines
2714 bytes
2714 bytes
Matuzalem napisał(a): > Remek napisal(a): >>> program dziala poprawnie na Windows 98SE natomiast na >>> wszystkich w zwyz nie >> Czytalem gdzies (nie podam Ci teraz linku), ze wywolywanie >> przerwan w NT-kach jest mozliwe, ale wyglada nieco inaczej. >> Jak znajde ten material, odezwe sie. > > Z tego co ja wiem przerywania w NT nie sa juz mozliwe z powodu braku > czystego DOS-a (ale czy tak jest ?) wiec jakbys znalazl to bylbym > wdzieczny. Według mojej wiedzy, wszystkie przerwania są formalnie zabronione w programie 32-bitowym pod system Windows. Podobno w NT-kach jakaś część systemu jest pod przerwaniem int 2E (czy int 2F?). Może nawet wszystko niebanalne (czyli składające się z czegoś więcej niż zwrócenie jednej zmiennej) przez to przechodzi. Ale mówię "podobno". Jeśli tak jest, to nie jest to udokumentowane, czyli może się zmieniać przy dowolnej okazji. Interfejs WinAPI jest tym, z którego należy korzystać. Oczywiście, jak napiszesz program DOSowy (.com czy .exe), to jak najbardziej będzie działać. Może nie wszystkie funkcje będą emulowane przez system (bo DOSa już nie ma, tylko jest emulacja), ale będzie działać. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Mon, 28 Aug 2006 13:33
Date: Mon, 28 Aug 2006 13:33
35 lines
2962 bytes
2962 bytes
Bogdan (bogdro) napisał(a): > Matuzalem napisał(a): > > Remek napisal(a): > >>> program dziala poprawnie na Windows 98SE natomiast na > >>> wszystkich w zwyz nie > >> Czytalem gdzies (nie podam Ci teraz linku), ze wywolywanie > >> przerwan w NT-kach jest mozliwe, ale wyglada nieco inaczej. > >> Jak znajde ten material, odezwe sie. > > > > Z tego co ja wiem przerywania w NT nie sa juz mozliwe z powodu braku > > czystego DOS-a (ale czy tak jest ?) wiec jakbys znalazl to bylbym > > wdzieczny. > > Według mojej wiedzy, wszystkie przerwania są formalnie zabronione w > programie 32-bitowym pod system Windows. Podobno w NT-kach jakaś część > systemu jest pod przerwaniem int 2E (czy int 2F?). Może nawet wszystko > niebanalne (czyli składające się z czegoś więcej niż zwrócenie jednej > zmiennej) przez to przechodzi. Ale mówię "podobno". Jeśli tak jest, to > nie jest to udokumentowane, czyli może się zmieniać przy dowolnej > okazji. Interfejs WinAPI jest tym, z którego należy korzystać. O tym nie słyszałem, być może... > Oczywiście, jak napiszesz program DOSowy (.com czy .exe), to jak > najbardziej będzie działać. Może nie wszystkie funkcje będą emulowane > przez system (bo DOSa już nie ma, tylko jest emulacja), ale będzie > działać. Wiem, wiem, pisząc: "z powodu braku DOS-a", miałem na myśli dla 32-bitowych app w win NT :) > Pozdrawiam, Bogdan Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Mon, 28 Aug 2006 13:45
Date: Mon, 28 Aug 2006 13:45
10 lines
1849 bytes
1849 bytes
Bogdan (bogdro) napisał(a): > Według mojej wiedzy, wszystkie przerwania są formalnie zabronione w > programie 32-bitowym pod system Windows. Podobno w NT-kach jakaś część > systemu jest pod przerwaniem int 2E (czy int 2F?). int 2E -> http://www.ctyme.com/intr/int-2e.htm int 2F -> http://www.ctyme.com/intr/int-2f.htm Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Bogdan (bogdro)
Date: Mon, 28 Aug 2006 13:58
Date: Mon, 28 Aug 2006 13:58
17 lines
2078 bytes
2078 bytes
Matuzalem napisał(a): > Bogdan (bogdro) napisał(a): >> Według mojej wiedzy, wszystkie przerwania są formalnie zabronione w >> programie 32-bitowym pod system Windows. Podobno w NT-kach jakaś część >> systemu jest pod przerwaniem int 2E (czy int 2F?). > > int 2E -> http://www.ctyme.com/intr/int-2e.htm > int 2F -> http://www.ctyme.com/intr/int-2f.htm Czyli trafiłem z tym 2E :), ale 2F (Multiplex) też jest trochę używane przez Windows. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Mon, 28 Aug 2006 15:00
Date: Mon, 28 Aug 2006 15:00
27 lines
2405 bytes
2405 bytes
Bogdan (bogdro) napisał(a):
> > int 2E -> http://www.ctyme.com/intr/int-2e.htm
> > int 2F -> http://www.ctyme.com/intr/int-2f.htm
>
> Czyli trafiłem z tym 2E :), ale 2F (Multiplex) też jest trochę
> używane przez Windows.
No :), ale nigdzie nie moge znaleść czegoś podobnego do int 16h
(albo system("pause");).
Chyba źle szukam.... :P
A Bogdan tak kożystając z okazji, może to nic strasznego, ale w
twoim kursie:
http://rudy.mif.pg.gda.pl/~bogdro/dos/asm/na_duze.txt
http://rudy.mif.pg.gda.pl/~bogdro/dos/asm/na_male.txt
ta linijka - u góry w opisie:
; nasm -O999 -o na_duze.com -f bin na_duze.asm
jest taka sama w obu plikach, nie zależnie czy to na_male.txt, czy
na_duze.txt
Co prawda jest w pierwszej linijce napisane co robi program, ale ... :)
Pozdrawiam
Re: mov ah, 0/int 16h ;blad?
Author: Bogdan (bogdro)
Date: Mon, 28 Aug 2006 16:06
Date: Mon, 28 Aug 2006 16:06
41 lines
3064 bytes
3064 bytes
Matuzalem napisał(a):
> Bogdan (bogdro) napisał(a):
>>> int 2E -> http://www.ctyme.com/intr/int-2e.htm
>>> int 2F -> http://www.ctyme.com/intr/int-2f.htm
>> Czyli trafiłem z tym 2E :), ale 2F (Multiplex) też jest trochę
>> używane przez Windows.
>
> No :), ale nigdzie nie moge znaleść czegoś podobnego do int 16h
> (albo system("pause");).
> Chyba źle szukam.... :P
ReadFile z argumentem 'Standard In' (0) - po prostu czytanie z
klawiatury, jakkolwiek by to nie napisać. Ściągnij opis WinAPI ze
strony Iczeliona i popatrz.
Oczywiście, jeśli wejście jest przekierowane z pliku/procesu, to
lipa. Pewnie jest coś działające tylko na klawiaturze, ale nie wiem :)
> A Bogdan tak kożystając z okazji, może to nic strasznego, ale w
> twoim kursie:
>
> http://rudy.mif.pg.gda.pl/~bogdro/dos/asm/na_duze.txt
> http://rudy.mif.pg.gda.pl/~bogdro/dos/asm/na_male.txt
>
> ta linijka - u góry w opisie:
>
> ; nasm -O999 -o na_duze.com -f bin na_duze.asm
>
> jest taka sama w obu plikach, nie zależnie czy to na_male.txt, czy
> na_duze.txt
> Co prawda jest w pierwszej linijce napisane co robi program, ale ... :)
... ale istotnie jest to nieścisłość, delikatnie mówiąc. Znów
wychodzi moja filozofia Kopiuj-Wklej :) A w oryginale jeszcze było dobrze.
Dzięki za zgłoszenie, zaraz poprawiam.
--
Pozdrawiam, Bogdan (Linux i FreeDOS)
Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Re: mov ah, 0/int 16h ;blad?
Author: Matuzalem
Date: Mon, 28 Aug 2006 16:44
Date: Mon, 28 Aug 2006 16:44
36 lines
3015 bytes
3015 bytes
Bogdan (bogdro) napisał(a): > ReadFile z argumentem 'Standard In' (0) - po prostu czytanie z > klawiatury, jakkolwiek by to nie napisać. Ściągnij opis WinAPI ze > strony Iczeliona i popatrz. > Oczywiście, jeśli wejście jest przekierowane z pliku/procesu, to > lipa. Pewnie jest coś działające tylko na klawiaturze, ale nie wiem :) No właśnie, wierzba :P... Teraz do głowy mi przyszło, że może wykorzystam KEY_EVENT i ReadConsoleInput (się zobaczy...) :) > > A Bogdan tak kożystając z okazji, może to nic strasznego, ale w > > twoim kursie: > > > > http://rudy.mif.pg.gda.pl/~bogdro/dos/asm/na_duze.txt > > http://rudy.mif.pg.gda.pl/~bogdro/dos/asm/na_male.txt > > > > ta linijka - u góry w opisie: > > > > ; nasm -O999 -o na_duze.com -f bin na_duze.asm > > > > jest taka sama w obu plikach, nie zależnie czy to na_male.txt, czy > > na_duze.txt > > Co prawda jest w pierwszej linijce napisane co robi program, ale ... :) > > ... ale istotnie jest to nieścisłość, delikatnie mówiąc. Znów > wychodzi moja filozofia Kopiuj-Wklej :) A w oryginale jeszcze było dobrze. > > Dzięki za zgłoszenie, zaraz poprawiam. Nie ma sprawy, jak coś jeszcze znajde, dam znać... > Pozdrawiam, Bogdan Pozdrawiam
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads