Thread View: pl.comp.lang.asm
26 messages
26 total messages
Started by johnny
Thu, 21 Dec 2006 22:55
jnc i eax
Author: johnny
Date: Thu, 21 Dec 2006 22:55
Date: Thu, 21 Dec 2006 22:55
12 lines
1110 bytes
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
Author: GiM
Date: Thu, 21 Dec 2006 23:55
Date: Thu, 21 Dec 2006 23:55
22 lines
1992 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 00:24
Date: Fri, 22 Dec 2006 00:24
33 lines
1903 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 00:28
Date: Fri, 22 Dec 2006 00:28
31 lines
2181 bytes
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
Author: GiM
Date: Fri, 22 Dec 2006 00:57
Date: Fri, 22 Dec 2006 00:57
41 lines
2753 bytes
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
Author: Johnny
Date: Fri, 22 Dec 2006 08:09
Date: Fri, 22 Dec 2006 08:09
29 lines
1697 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 09:51
Date: Fri, 22 Dec 2006 09:51
47 lines
2744 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 09:56
Date: Fri, 22 Dec 2006 09:56
35 lines
2358 bytes
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
Author: Johnny
Date: Fri, 22 Dec 2006 11:23
Date: Fri, 22 Dec 2006 11:23
22 lines
1902 bytes
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
Author: Michal Schulz
Date: Fri, 22 Dec 2006 11:28
Date: Fri, 22 Dec 2006 11:28
17 lines
1466 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 12:27
Date: Fri, 22 Dec 2006 12:27
20 lines
1947 bytes
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
Author: Michal Schulz
Date: Fri, 22 Dec 2006 12:34
Date: Fri, 22 Dec 2006 12:34
16 lines
1476 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 13:42
Date: Fri, 22 Dec 2006 13:42
22 lines
2012 bytes
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
Author: Michal Schulz
Date: Fri, 22 Dec 2006 14:21
Date: Fri, 22 Dec 2006 14:21
24 lines
1902 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:39
Date: Fri, 22 Dec 2006 14:39
25 lines
2349 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:39
Date: Fri, 22 Dec 2006 14:39
26 lines
2357 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:47
Date: Fri, 22 Dec 2006 14:47
29 lines
2439 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 14:47
Date: Fri, 22 Dec 2006 14:47
10 lines
1793 bytes
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
Author: GiM
Date: Fri, 22 Dec 2006 14:54
Date: Fri, 22 Dec 2006 14:54
30 lines
2656 bytes
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
Author: Michal Schulz
Date: Fri, 22 Dec 2006 15:01
Date: Fri, 22 Dec 2006 15:01
49 lines
2563 bytes
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
Author: Matuzalem
Date: Fri, 22 Dec 2006 15:08
Date: Fri, 22 Dec 2006 15:08
55 lines
3044 bytes
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
Author: Bogdan (bogdro)
Date: Fri, 22 Dec 2006 16:16
Date: Fri, 22 Dec 2006 16:16
35 lines
2892 bytes
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
Author: Bernard
Date: Fri, 22 Dec 2006 22:08
Date: Fri, 22 Dec 2006 22:08
26 lines
1698 bytes
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
Author: GiM
Date: Fri, 22 Dec 2006 22:20
Date: Fri, 22 Dec 2006 22:20
16 lines
1975 bytes
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
Author: Wiktor S.
Date: Fri, 22 Dec 2006 23:52
Date: Fri, 22 Dec 2006 23:52
15 lines
1684 bytes
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
Author: Wiktor S.
Date: Sat, 23 Dec 2006 12:55
Date: Sat, 23 Dec 2006 12:55
9 lines
1213 bytes
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