🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
26 messages
26 total messages Started by johnny Thu, 21 Dec 2006 22:55
jnc i eax
#912
Author: johnny
Date: Thu, 21 Dec 2006 22:55
12 lines
1110 bytes
W książce, którą przerabiam istnieje taki fragment kodu:

xor eax,eax
(...) ; operacje nie zmieniające eax
jnc eax
(...)

Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
takiej operacji jnc 0?

-- 
Johnny
Re: jnc i eax
#920
Author: GiM
Date: Thu, 21 Dec 2006 23:55
22 lines
1992 bytes
Someone saying he's: johnny wrote:
> W książce, którą przerabiam istnieje taki fragment kodu:
>
> xor eax,eax
> (...) ; operacje nie zmieniające eax
> jnc eax
> (...)
>
> Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
> takiej operacji jnc 0?
>

erm, no jeśli flaga carry [coś po drodze może ją zmienić]
nie jest ustawiona to skocz pod eax, czyli pod zero,
co pewnie spowoduje wyrzucenie jakiegoś wyjątku

[bo chyba ani pod win, ani pod lin, nie można skoczyć
 sobie pod zero, jak się mylę, proszę mnie poprawić]

 z poważaniem Michał Spadliński
-- 
 main(int a[puts("Michal 'GiM' Spadlinski")]){}
Re: jnc i eax
#913
Author: Matuzalem
Date: Fri, 22 Dec 2006 00:24
33 lines
1903 bytes
johnny napisał(a):
> W książce, którą przerabiam istnieje taki fragment kodu:
>
> xor eax,eax
> (...) ; operacje nie zmieniające eax
> jnc eax
> (...)
>
> Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
> takiej operacji jnc 0?
>
> --
> Johnny

Witam

jnc oznacza skok, jeśli brak przeniesienia.
Jeśli za pomocą j-warunek (lub jmp short/far itp.) skaczemy "do 0", a
wcześniej wszystkie rejestry segmentów zostały poprawnie ustawione
(.com, .exe itd) to program skacze do początku tzn. wykonuje się
jeszcze raz np.

start:
...
...

jmp start

W tym przypadku, program będzie się wykonywać w pętli zaczynając
od początku, aż do momentu jnc do póki nie będzie przeniesienia.

Pozdrawiam
Re: jnc i eax
#921
Author: Matuzalem
Date: Fri, 22 Dec 2006 00:28
31 lines
2181 bytes
GiM napisał(a):
> Someone saying he's: johnny wrote:
> > W książce, którą przerabiam istnieje taki fragment kodu:
> >
> > xor eax,eax
> > (...) ; operacje nie zmieniające eax
> > jnc eax
> > (...)
> >
> > Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
> > takiej operacji jnc 0?
> >
>
> erm, no jeśli flaga carry [coś po drodze może ją zmienić]
Witam

flaga carry - czyli CF; wynik operacji arytmetycznej bez znaku jest
zbyt duży i nie mieści się w miejscu docelowym - to nie
przeniesienie.
Przeniesienie to Auxiliary Carry.

> nie jest ustawiona to skocz pod eax, czyli pod zero,
> co pewnie spowoduje wyrzucenie jakiegoś wyjątku

Nie, jeśli wszystko zostało poprawnie zainicjowane i "jakimś cudem"
skok nie odbędzie się poza program, po wykonaniu jnc - w tym
przypadku - program rozpocznie wykonywać się od początku aż do
momentu wykonania przeniesienia.

Pozdrawiam
Re: jnc i eax
#922
Author: GiM
Date: Fri, 22 Dec 2006 00:57
41 lines
2753 bytes
Someone saying he's: Matuzalem wrote:
>
> GiM napisał(a):
>> Someone saying he's: johnny wrote:
>> > W książce, którą przerabiam istnieje taki fragment kodu:
>> >
>> > xor eax,eax
>> > (...) ; operacje nie zmieniające eax
>> > jnc eax
>> > (...)
>> >
>> > Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
>> > takiej operacji jnc 0?
>> >
>>
>> erm, no jeśli flaga carry [coś po drodze może ją zmienić]
> Witam
>
> flaga carry - czyli CF; wynik operacji arytmetycznej bez znaku jest
> zbyt duży i nie mieści się w miejscu docelowym - to nie
> przeniesienie.
> Przeniesienie to Auxiliary Carry.
>

to też miałem na myśli, rozumiem, że odpowiedź w celu sprostowania.

>> nie jest ustawiona to skocz pod eax, czyli pod zero,
>> co pewnie spowoduje wyrzucenie jakiegoś wyjątku
>
> Nie, jeśli wszystko zostało poprawnie zainicjowane i "jakimś cudem"
> skok nie odbędzie się poza program, po wykonaniu jnc - w tym
> przypadku - program rozpocznie wykonywać się od początku aż do
> momentu wykonania przeniesienia.
>

Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]

 z poważaniem, Michał Spadliński
-- 
 main(int a[puts("Michal 'GiM' Spadlinski")]){}
Re: jnc i eax
#914
Author: Johnny
Date: Fri, 22 Dec 2006 08:09
29 lines
1697 bytes
> Witam
> 
> jnc oznacza skok, jeśli brak przeniesienia.
> Jeśli za pomocą j-warunek (lub jmp short/far itp.) skaczemy "do 0", a
> wcześniej wszystkie rejestry segmentów zostały poprawnie ustawione
> (.com, .exe itd) to program skacze do początku tzn. wykonuje się
> jeszcze raz np.
> 
> start:
> ...
> ...
> 
> jmp start
> 
> W tym przypadku, program będzie się wykonywać w pętli zaczynając
> od początku, aż do momentu jnc do póki nie będzie przeniesienia.
> 
> Pozdrawiam
> 

Dzięki. Szkoda, że autor podręcznika zapomniał o tym wspomnieć.


-- 
Pozdrawiam
Johnny

"Zauważyłem że ci wszyscy, którzy opowiadają się za aborcją, zdążyli się
urodzić". R. Reagan
Re: jnc i eax
#923
Author: Matuzalem
Date: Fri, 22 Dec 2006 09:51
47 lines
2744 bytes
GiM napisał(a):
> Someone saying he's: Matuzalem wrote:
> >
> > GiM napisał(a):
> >> Someone saying he's: johnny wrote:
> >> > W książce, którą przerabiam istnieje taki fragment kodu:
> >> >
> >> > xor eax,eax
> >> > (...) ; operacje nie zmieniające eax
> >> > jnc eax
> >> > (...)
> >> >
> >> > Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
> >> > takiej operacji jnc 0?
> >> >
> >>
> >> erm, no jeśli flaga carry [coś po drodze może ją zmienić]
> > Witam
> >
> > flaga carry - czyli CF; wynik operacji arytmetycznej bez znaku jest
> > zbyt duży i nie mieści się w miejscu docelowym - to nie
> > przeniesienie.
> > Przeniesienie to Auxiliary Carry.
> >
>
> to też miałem na myśli, rozumiem, że odpowiedź w celu sprostowania.

Użyłeś słowa carry, nie wiedziałem, że to skrót myślowy.

> >> nie jest ustawiona to skocz pod eax, czyli pod zero,
> >> co pewnie spowoduje wyrzucenie jakiegoś wyjątku
> >
> > Nie, jeśli wszystko zostało poprawnie zainicjowane i "jakimś cudem"
> > skok nie odbędzie się poza program, po wykonaniu jnc - w tym
> > przypadku - program rozpocznie wykonywać się od początku aż do
> > momentu wykonania przeniesienia.
> >
>
> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]

Tak.

>  z poważaniem, Michał Spadliński

Pozdrawiam
Re: jnc i eax
#915
Author: Matuzalem
Date: Fri, 22 Dec 2006 09:56
35 lines
2358 bytes
Johnny napisał(a):
> > Witam
> >
> > jnc oznacza skok, jeśli brak przeniesienia.
> > Jeśli za pomocą j-warunek (lub jmp short/far itp.) skaczemy "do 0", a
> > wcześniej wszystkie rejestry segmentów zostały poprawnie ustawione
> > (.com, .exe itd) to program skacze do początku tzn. wykonuje się
> > jeszcze raz np.
> >
> > start:
> > ...
> > ...
> >
> > jmp start
> >
> > W tym przypadku, program będzie się wykonywać w pętli zaczynając
> > od początku, aż do momentu jnc do póki nie będzie przeniesienia.
> >
> > Pozdrawiam
> >
>
> Dzięki. Szkoda, że autor podręcznika zapomniał o tym wspomnieć.

Nie ma za co :]
Często tak jest, że autorzy książek "zapominają" o czymś
wspomnieć i potem człowiek głowi się: "co autor chciał przez to
powiedzieć..." :)
Proponuje Ci, bawić się asm, bo to coś pięknego (oczywiście z
rozsądkiem, bo asm czasem może być niebezpieczny :P ). Samemu
próbuj pisać, a potem sprawdzać w dbg zachowanie kodu. Wiele frajdy,
zdobywanie doświadczenia (człowiek najlepiej uczy się poprzez
własne błędy).

Pozdrawiam
Re: jnc i eax
#916
Author: Johnny
Date: Fri, 22 Dec 2006 11:23
22 lines
1902 bytes
> Nie ma za co :]
> Często tak jest, że autorzy książek "zapominają" o czymś
> wspomnieć i potem człowiek głowi się: "co autor chciał przez to
> powiedzieć..." :)
> Proponuje Ci, bawić się asm, bo to coś pięknego (oczywiście z
> rozsądkiem, bo asm czasem może być niebezpieczny :P ). Samemu
> próbuj pisać, a potem sprawdzać w dbg zachowanie kodu. Wiele frajdy,
> zdobywanie doświadczenia (człowiek najlepiej uczy się poprzez
> własne błędy).
> 
> Pozdrawiam
> 
Zgadzam się z Tobą. Jest "coś" w niskopoziomowym podejściu do
programowania. Oczywiście ERPa bym w tym nie pisał niemniej jednak
istnieje wiele zastosowań dla asma.

-- 
Pozdrawiam
Johnny

"Zauważyłem że ci wszyscy, którzy opowiadają się za aborcją, zdążyli się
urodzić". R. Reagan
Re: jnc i eax
#924
Author: Michal Schulz
Date: Fri, 22 Dec 2006 11:28
17 lines
1466 bytes
Matuzalem wrote:

>> > Nie, jeśli wszystko zostało poprawnie zainicjowane i "jakimś cudem"
>> > skok nie odbędzie się poza program, po wykonaniu jnc - w tym
>> > przypadku - program rozpocznie wykonywać się od początku aż do
>> > momentu wykonania przeniesienia.
>> >
>>
>> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
>> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
> 
> Tak.

Gdzie konkretnie? 

-- 
Michal Schulz
Re: jnc i eax
#925
Author: Matuzalem
Date: Fri, 22 Dec 2006 12:27
20 lines
1947 bytes
Michal Schulz napisał(a):
> Matuzalem wrote:
>
> >> > Nie, jeśli wszystko zostało poprawnie zainicjowane i "jakimś cudem"
> >> > skok nie odbędzie się poza program, po wykonaniu jnc - w tym
> >> > przypadku - program rozpocznie wykonywać się od początku aż do
> >> > momentu wykonania przeniesienia.
> >> >
> >>
> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
> >
> > Tak.
>
> Gdzie konkretnie?

Nie za bardzo rozumiem pytanie, jak gdzie i co...?

Pozdrawiam
Re: jnc i eax
#926
Author: Michal Schulz
Date: Fri, 22 Dec 2006 12:34
16 lines
1476 bytes
Matuzalem wrote:

>> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
>> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
>> >
>> > Tak.
>>
>> Gdzie konkretnie?
> 
> Nie za bardzo rozumiem pytanie, jak gdzie i co...?

pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax) jest
rownowazny skokowi na poczatek programu?

-- 
Michal Schulz
Re: jnc i eax
#927
Author: Matuzalem
Date: Fri, 22 Dec 2006 13:42
22 lines
2012 bytes
Michal Schulz napisał(a):
> Matuzalem wrote:
>
> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
> >> >
> >> > Tak.
> >>
> >> Gdzie konkretnie?
> >
> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
>
> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax) jest
> rownowazny skokowi na poczatek programu?
>
> --
> Michal Schulz

Teoretycznie każdym, praktycznie nie sprawdzałem.

Pozdrawiam
Re: jnc i eax
#928
Author: Michal Schulz
Date: Fri, 22 Dec 2006 14:21
24 lines
1902 bytes
Matuzalem wrote:

>> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
>> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
>> >> >
>> >> > Tak.
>> >>
>> >> Gdzie konkretnie?
>> >
>> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
>>
>> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax)
>> jest rownowazny skokowi na poczatek programu?
>
> Teoretycznie każdym, praktycznie nie sprawdzałem.

To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
niepotrzebnie wprowadzasz ludzi w blad :)

PS. Pod linuksem domyslny adres sekcji z kodem to 0x8048074. Pod windowsem
jest inny, ale tez jest rozny od zera

-- 
Michal Schulz
Re: jnc i eax
#929
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:39
25 lines
2349 bytes
Michal Schulz napisał(a):
> Matuzalem wrote:
>
> >> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> >> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
> >> >> >
> >> >> > Tak.
> >> >>
> >> >> Gdzie konkretnie?
> >> >
> >> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
> >>
> >> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax)
> >> jest rownowazny skokowi na poczatek programu?
> >
> > Teoretycznie każdym, praktycznie nie sprawdzałem.
>
> To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
> niepotrzebnie wprowadzasz ludzi w blad :)

To raczej Ty sprawdź, pod win skacze na początek kodu, tak jak pisze.
lx na razie nie mam pod ręką, ale też sprawdzę i potwierdzi się.

Pozdrawiam
Re: jnc i eax
#932
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:39
26 lines
2357 bytes
Michal Schulz napisał(a):
> Matuzalem wrote:
>
> >> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> >> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
> >> >> >
> >> >> > Tak.
> >> >>
> >> >> Gdzie konkretnie?
> >> >
> >> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
> >>
> >> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax)
> >> jest rownowazny skokowi na poczatek programu?
> >
> > Teoretycznie każdym, praktycznie nie sprawdzałem.
>
> To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
> niepotrzebnie wprowadzasz ludzi w blad :)

To raczej Ty sprawdź, pod win skacze na początek kodu, tak jak
pisałem. lx na razie nie mam pod ręką, ale też sprawdzę i
potwierdzi się.

Pozdrawiam
Re: jnc i eax
#933
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:47
29 lines
2439 bytes
Michal Schulz napisał(a):
> Matuzalem wrote:
>
> >> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> >> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie spotkałem]
> >> >> >
> >> >> > Tak.
> >> >>
> >> >> Gdzie konkretnie?
> >> >
> >> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
> >>
> >> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax)
> >> jest rownowazny skokowi na poczatek programu?
> >
> > Teoretycznie każdym, praktycznie nie sprawdzałem.
>
> To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
> niepotrzebnie wprowadzasz ludzi w blad :)
>
> PS. Pod linuksem domyslny adres sekcji z kodem to 0x8048074. Pod windowsem
> jest inny, ale tez jest rozny od zera
>

Adres sekcji jest zależny od wielu czynników.
Po drugie, podajesz offset jakiego adresu...?

Pozdrawiam
Re: jnc i eax
#934
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:47
10 lines
1793 bytes
Michal Schulz napisał(a):
> PS. Pod linuksem domyslny adres sekcji z kodem to 0x8048074. Pod windowsem
> jest inny, ale tez jest rozny od zera
>

Adres sekcji jest zależny od wielu czynników.
Po drugie, podajesz offset jakiego adresu...?

Pozdrawiam
Re: jnc i eax
#935
Author: GiM
Date: Fri, 22 Dec 2006 14:54
30 lines
2656 bytes
Someone saying he's: Michal Schulz wrote:
> Matuzalem wrote:
>
>>
>> Teoretycznie każdym, praktycznie nie sprawdzałem.
>
> To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
> niepotrzebnie wprowadzasz ludzi w blad :)
>

oidp, pod dosem było coś takiego, że jeśli CS był ustawiony na PSP
to pod offsetem 0, był int 20h i skok pod ten offset wywoływał tego
inta 20

[stąd najkrótszy program dla win to o ile się nie mylę 0xc3 zapisane
 jako com]

> PS. Pod linuksem domyslny adres sekcji z kodem to 0x8048074. Pod windowsem
> jest inny, ale tez jest rozny od zera
>

to, to domyślam się, że wie :]

ja myślałem, że może jest coś podobnego jak z tym w dosie,
że jeżeli odpowiednie rejestry [segmentowe (pod linuxem można je
zmieniać?)] się ustawi, to może też nastąpi skok pod zapisane 'gdzieś' ep

 z poważaniem, Michał Spadliński
-- 
 main(int a[puts("Michal 'GiM' Spadlinski")]){}
Re: jnc i eax
#930
Author: Michal Schulz
Date: Fri, 22 Dec 2006 15:01
49 lines
2563 bytes
Matuzalem wrote:

> 
> Michal Schulz napisał(a):
>> Matuzalem wrote:
>>
>> >> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
>> >> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie
>> >> >> >> spotkałem]
>> >> >> >
>> >> >> > Tak.
>> >> >>
>> >> >> Gdzie konkretnie?
>> >> >
>> >> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
>> >>
>> >> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax)
>> >> jest rownowazny skokowi na poczatek programu?
>> >
>> > Teoretycznie każdym, praktycznie nie sprawdzałem.
>>
>> To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
>> niepotrzebnie wprowadzasz ludzi w blad :)
> 
> To raczej Ty sprawdź, pod win skacze na początek kodu, tak jak pisze.

jaki program? 16-bitowy uruchamiany pod windowsem?

> lx na razie nie mam pod ręką, ale też sprawdzę i potwierdzi się.

prosz...:

misc@laptop:/dev/shm> cat a.s
    .text
    .globl _start
_start:
    xorl %eax,%eax
    jmp *%eax

misc@laptop:/dev/shm> gcc -c a.s
misc@laptop:/dev/shm> ld a.o
misc@laptop:/dev/shm> ./a.out
Speicherzugriffsfehler

Owszem, mozna wymusic inny adres domyslny (ld -Ttext=0 a.o), ale nie jest to
czesta praktyka.

-- 
Michal Schulz
Re: jnc i eax
#931
Author: Matuzalem
Date: Fri, 22 Dec 2006 15:08
55 lines
3044 bytes
Michal Schulz napisał(a):
> Matuzalem wrote:
>
> >
> > Michal Schulz napisał(a):
> >> Matuzalem wrote:
> >>
> >> >> >> >> Zasugerowałem się [po eax], że jest w 32bitach i płaskim modelu
> >> >> >> >> pamięci. Wtedy też coś takiego obowiązuje? [bo się nie
> >> >> >> >> spotkałem]
> >> >> >> >
> >> >> >> > Tak.
> >> >> >>
> >> >> >> Gdzie konkretnie?
> >> >> >
> >> >> > Nie za bardzo rozumiem pytanie, jak gdzie i co...?
> >> >>
> >> >> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax)
> >> >> jest rownowazny skokowi na poczatek programu?
> >> >
> >> > Teoretycznie każdym, praktycznie nie sprawdzałem.
> >>
> >> To sprawdz praktycznie zanim nie zaczniesz teoretyzowac. Inaczej
> >> niepotrzebnie wprowadzasz ludzi w blad :)
> >
> > To raczej Ty sprawdź, pod win skacze na początek kodu, tak jak pisze.
>
> jaki program? 16-bitowy uruchamiany pod windowsem?

16 i 32.

> > lx na razie nie mam pod ręką, ale też sprawdzę i potwierdzi się.
>
> prosz...:
>
> misc@laptop:/dev/shm> cat a.s
>     .text
>     .globl _start
> _start:
>     xorl %eax,%eax
>     jmp *%eax
>
> misc@laptop:/dev/shm> gcc -c a.s
> misc@laptop:/dev/shm> ld a.o
> misc@laptop:/dev/shm> ./a.out
> Speicherzugriffsfehler
>
> Owszem, mozna wymusic inny adres domyslny (ld -Ttext=0 a.o), ale nie jest to
> czesta praktyka.
> 
> -- 
> Michal Schulz

Pozdrawiam
Re: jnc i eax
#937
Author: Bogdan (bogdro)
Date: Fri, 22 Dec 2006 16:16
35 lines
2892 bytes
Matuzalem napisał(a):
> Michal Schulz napisał(a):
[...]
>> pod jakim systemem operacyjnym skok pod adres 0 (xor eax,eax; j.. eax) jest
>> rownowazny skokowi na poczatek programu?
>>
>> --
>> Michal Schulz
> 
> Teoretycznie każdym, praktycznie nie sprawdzałem.

 Pod każdym systemem, o ile jest to jakaś odmiana DOSa i w każdym
programie tak jest pod warunkiem, że jest to 16-bitowy .exe :) (sekcja
kodu w EXE-16 zaczyna się od offsetu 0 w segmencie wskazywanym przez CS).

 W .com skok pod zero zamknie program (wspomniane int 20h), a nie
skoczy na jego początek, bo program zaczyna się od offsetu 100h.

 W 32-bitowych systemach operacyjnych adres 0 jest chroniony przed
wszelkim dostępem, nie można nawet tam czytać danych. Jak myślicie,
dlaczego dereferencja wskaźnika NULL w języku C (32-bit!) powoduje
zamknięcie programu próbującego wykonać tę operację? Ano właśnie z tej
przyczyny. Tak powinno być i w Linuksie (x86) i w Windowsie (>=95).

 Popieram myśl, że "xor eax,eax / ... / jnc eax" może służyć
wyłapywaniu problemów w programie (tzn. jakiś warunek nie jest
spełniony => lepiej zamknąć program niż kontynuować, choć czemu tak
drastycznie?). Pewnie można też tak sprawdzać (i na wiele innych
sposobów), czy program nie jest "śledzony".

-- 
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
Rozmawiaj bezpiecznie: www.JabberPL.org Surfuj anonimowo: tor.eff.org
Re: jnc i eax
#917
Author: Bernard
Date: Fri, 22 Dec 2006 22:08
26 lines
1698 bytes
Matuzalem wrote:
> johnny napisał(a):
>> W książce, którą przerabiam istnieje taki fragment kodu:
>>
>> xor eax,eax
>> (...) ; operacje nie zmieniające eax
>> jnc eax
>> (...)
>>
>> Z kodu wynika jasno, że eax w linii jnc wynosi 0. Jakie jest znaczenie
>> takiej operacji jnc 0?
>>
>> --
>> Johnny
> 
> Witam
> 
> jnc oznacza skok, jeśli brak przeniesienia.
> Jeśli za pomocą j-warunek (lub jmp short/far itp.) skaczemy "do 0", a
> wcześniej wszystkie rejestry segmentów zostały poprawnie ustawione
> (.com, .exe itd) to program skacze do początku tzn. wykonuje się
> jeszcze raz np.

Bzdury waść pleciesz ;). W x86 nie ma skoków warunkowych z wyliczanym 
adresem, w tym z adresem w eax. Przytoczony kod zawiera oczywistą 
literówkę - miało być INC AEX, a nie "jnc eax"
Re: jnc i eax
#918
Author: GiM
Date: Fri, 22 Dec 2006 22:20
16 lines
1975 bytes
Someone saying he's: Bernard wrote:
>
> Bzdury waść pleciesz ;). W x86 nie ma skoków warunkowych z wyliczanym 
> adresem, w tym z adresem w eax. Przytoczony kod zawiera oczywistą 
> literówkę - miało być INC AEX, a nie "jnc eax"

hahaha :D

dziwie się, że nikt wcześniej nie zwrócił uwagi :D

ja sam (pewnie jak reszta) zastanawiałem się raczej nad samą możliwością
skoku pod adres zerowy, niż nad tym, czy mozna taką instrukcję napisać :)

 z poważaniem, Michał Spadliński
-- 
 main(int a[puts("Michal 'GiM' Spadlinski")]){}
Re: jnc i eax
#936
Author: Wiktor S.
Date: Fri, 22 Dec 2006 23:52
15 lines
1684 bytes
> oidp, pod dosem było coś takiego, że jeśli CS był ustawiony na PSP
> to pod offsetem 0, był int 20h i skok pod ten offset wywoływał tego
> inta 20
>
> [stąd najkrótszy program dla win to o ile się nie mylę 0xc3 zapisane
> jako com]

w DOS-ie owszem, .com może się składać z jednej instrukcji

    ret

ale pod windą?

-- 
Azarien
Re: jnc i eax
#919
Author: Wiktor S.
Date: Sat, 23 Dec 2006 12:55
9 lines
1213 bytes
> Bzdury waść pleciesz ;). W x86 nie ma skoków warunkowych z wyliczanym
> adresem, w tym z adresem w eax. Przytoczony kod zawiera oczywistą
> literówkę - miało być INC AEX, a nie "jnc eax"

o literówkach mowa...


-- 
Azarien
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