🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#522
Author: Matuzalem
Date: Tue, 22 Aug 2006 23:20
71 lines
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?
#523
Author: Bogdan (bogdro)
Date: Wed, 23 Aug 2006 08:30
62 lines
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?
#524
Author: Matuzalem
Date: Wed, 23 Aug 2006 09:45
72 lines
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?
#525
Author: Remek
Date: Wed, 23 Aug 2006 16:29
10 lines
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?
#526
Author: Matuzalem
Date: Wed, 23 Aug 2006 19:50
20 lines
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?
#527
Author: Remek
Date: Wed, 23 Aug 2006 22:24
19 lines
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?
#528
Author: Matuzalem
Date: Wed, 23 Aug 2006 23:46
10 lines
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?
#529
Author: Matuzalem
Date: Thu, 24 Aug 2006 11:08
29 lines
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?
#530
Author: Remek
Date: Mon, 28 Aug 2006 09:24
10 lines
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?
#531
Author: Matuzalem
Date: Mon, 28 Aug 2006 10:38
20 lines
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?
#532
Author: Bogdan (bogdro)
Date: Mon, 28 Aug 2006 13:20
30 lines
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?
#533
Author: Matuzalem
Date: Mon, 28 Aug 2006 13:33
35 lines
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?
#534
Author: Matuzalem
Date: Mon, 28 Aug 2006 13:45
10 lines
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?
#535
Author: Bogdan (bogdro)
Date: Mon, 28 Aug 2006 13:58
17 lines
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?
#536
Author: Matuzalem
Date: Mon, 28 Aug 2006 15:00
27 lines
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?
#537
Author: Bogdan (bogdro)
Date: Mon, 28 Aug 2006 16:06
41 lines
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?
#538
Author: Matuzalem
Date: Mon, 28 Aug 2006 16:44
36 lines
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