Thread View: pl.comp.lang.asm
8 messages
8 total messages
Started by panki
Sat, 11 Jun 2011 05:07
naruszenie ochrony pamieci - dlaczego
Author: panki
Date: Sat, 11 Jun 2011 05:07
Date: Sat, 11 Jun 2011 05:07
50 lines
708 bytes
708 bytes
witam - probuje troche oswoic sobie assemblera i nie zabardzo wiem gdzie popelnilem b³±d w przykladowym kodzie. Bo po uruchomieniu tego programu wypisuje ten napis i potem pisze naruszenie ochryny pamieci. ten kod jest podobny jaki zostal uzyty w bibl.zip ps. moze to trywialne pytanie ale dlaczego kladzie sie ebp na stos(a tak¿e eax i esi, pushfd) [code] section .text global _start _start: call pisz db "qwerty",0; wypisz zmienna mov eax,1 int 80h pisz: push ebp;ebp na stos mov ebp,esp pushfd push esi push eax mov esi,[ebp+4] mov [tmp],esi mov eax, 4 mov ebx,1 mov ecx, [tmp] mov edx,6 int 80h pop eax pop esi popfd pop ebp ret section .data tmp times 20 db 0
Re: naruszenie ochrony pamieci - dlaczego
Author: panki
Date: Sat, 11 Jun 2011 14:27
Date: Sat, 11 Jun 2011 14:27
71 lines
1228 bytes
1228 bytes
On 11 Cze, 20:19, yesma <ye...@false.pl> wrote: > panki pisze:> witam - probuje troche oswoic sobie assemblera i nie zabardzo wiem > > gdzie popelnilem b³±d w przykladowym kodzie. Bo po uruchomieniu tego > > programu wypisuje ten napis i potem pisze naruszenie ochryny pamieci. > > [...] > > > [code] > > section .text > > > global _start > > > _start: > > > call pisz > > jmp short .end > ;program sie wykladal bo to ponizej wykonywal jako kod> db "qwerty",0; wypisz zmienna > > .end: > > mov eax,1 > > int 80h > > > pisz: > > push ebp;ebp na stos > > mov ebp,esp > > pushfd > > push esi > > push eax > > > mov esi,[ebp+4] > > add esi,2 ;w esi adres napisu. jmp short==2bajty > > > > > > > > > mov [tmp],esi > > > mov eax, 4 > > mov ebx,1 > > mov ecx, [tmp] > > mov edx,6 > > int 80h > > > pop eax > > pop esi > > popfd > > pop ebp > > > ret > > > section .data > > tmp dd 0 > > -- > Pozdrawiam - Grzechu > Linux x86_64 to dlaczego na tej stronie http://rudy.mif.pg.gda.pl/~bogdro/linux/linux08.html tam jest dane s± w³a¶nie w sekcji kodu
Re: naruszenie ochrony pamieci - dlaczego
Author: Wojciech =?UTF-8
Date: Sat, 11 Jun 2011 17:45
Date: Sat, 11 Jun 2011 17:45
22 lines
580 bytes
580 bytes
On Sat, 11 Jun 2011 05:07:31 -0700 (PDT) panki <bartekn80@gmail.com> wrote: > witam - probuje troche oswoic sobie assemblera i nie zabardzo wiem > gdzie popelnilem błąd w przykladowym kodzie. Bo po uruchomieniu tego > programu wypisuje ten napis i potem pisze naruszenie ochryny pamieci. > [...] > _start: > > call pisz > db "qwerty",0; wypisz zmienna Masz dane w kodzie. :) Najpierw wywołujesz funkcję pisz, a następnie procesor 'wykonuje' napis "qwerty". Spróbuj zdisasemblować swój programik, sam się przekonasz. w.
Re: naruszenie ochrony pamieci - dlaczego
Author: yesma
Date: Sat, 11 Jun 2011 20:19
Date: Sat, 11 Jun 2011 20:19
57 lines
826 bytes
826 bytes
panki pisze: > witam - probuje troche oswoic sobie assemblera i nie zabardzo wiem > gdzie popelnilem b��d w przykladowym kodzie. Bo po uruchomieniu tego > programu wypisuje ten napis i potem pisze naruszenie ochryny pamieci. > [...] > > [code] > section .text > > global _start > > _start: > > call pisz jmp short .end ;program sie wykladal bo to ponizej wykonywal jako kod > db "qwerty",0; wypisz zmienna > .end: > mov eax,1 > int 80h > > pisz: > push ebp;ebp na stos > mov ebp,esp > pushfd > push esi > push eax > > mov esi,[ebp+4] add esi,2 ;w esi adres napisu. jmp short=+ajty > mov [tmp],esi > > mov eax, 4 > mov ebx,1 > mov ecx, [tmp] > mov edx,6 > int 80h > > pop eax > pop esi > popfd > pop ebp > > ret > > > section .data > tmp dd 0 -- Pozdrawiam - Grzechu Linux x86_64
Re: naruszenie ochrony pamieci - dlaczego
Author: panki
Date: Sun, 12 Jun 2011 00:37
Date: Sun, 12 Jun 2011 00:37
70 lines
1295 bytes
1295 bytes
On 11 Cze, 20:19, yesma <ye...@false.pl> wrote: > panki pisze:> witam - probuje troche oswoic sobie assemblera i nie zabardzo wiem > > gdzie popelnilem b³±d w przykladowym kodzie. Bo po uruchomieniu tego > > programu wypisuje ten napis i potem pisze naruszenie ochryny pamieci. > > [...] > > > [code] > > section .text > > > global _start > > > _start: > > > call pisz > > jmp short .end > ;program sie wykladal bo to ponizej wykonywal jako kod> db "qwerty",0; wypisz zmienna > > .end: > > mov eax,1 > > int 80h > > > pisz: > > push ebp;ebp na stos > > mov ebp,esp > > pushfd > > push esi > > push eax > > > mov esi,[ebp+4] > > add esi,2 ;w esi adres napisu. jmp short==2bajty > > > > > > > > > mov [tmp],esi > > > mov eax, 4 > > mov ebx,1 > > mov ecx, [tmp] > > mov edx,6 > > int 80h > > > pop eax > > pop esi > > popfd > > pop ebp > > > ret > > > section .data > > tmp dd 0 > > -- > Pozdrawiam - Grzechu > Linux x86_64 dzieki zapodpowiedz podzialalo - tylko nie zabardzo rozumiem czemu tego skoku nie ma w tym przykladzie :http://www.google.com/url? sa=D&q=http://rudy.mif.pg.gda.pl/~bogdro/linux/linux08.html
Re: naruszenie ochrony pamieci - dlaczego
Author: "Wiktor S."
Date: Sun, 12 Jun 2011 10:37
Date: Sun, 12 Jun 2011 10:37
17 lines
446 bytes
446 bytes
> to dlaczego na tej stronie > http://rudy.mif.pg.gda.pl/~bogdro/linux/linux08.html > > tam jest dane s� w�a�nie w sekcji kodu jest tam u�yte makro "pisz", kt�re poza wypisaniem powoduje automatyczne przeskoczenie napisu, tak by si� nie wykona�. IMHO to b��d w tutorialu dla pocz�tkuj�cych umieszcza� na samym pocz�tku zaawansowane procedury i magiczne makra, w dodatku bez s�owa wyja�nienia... -- Azarien
Re: naruszenie ochrony pamieci - dlaczego
Author: "Bogdan (bogdro)
Date: Sun, 12 Jun 2011 12:06
Date: Sun, 12 Jun 2011 12:06
87 lines
2119 bytes
2119 bytes
W dniu 12.06.2011 09:37, panki pisze: > On 11 Cze, 20:19, yesma <ye...@false.pl> wrote: >> panki pisze:> witam - probuje troche oswoic sobie assemblera i nie zabardzo wiem >>> gdzie popelnilem b��d w przykladowym kodzie. Bo po uruchomieniu tego >>> programu wypisuje ten napis i potem pisze naruszenie ochryny pamieci. >> >> [...] >> >>> [code] >>> section .text >> >>> global _start >> >>> _start: >> >>> call pisz >> >> jmp short .end >> ;program sie wykladal bo to ponizej wykonywal jako kod> db "qwerty",0; wypisz zmienna >> >> .end: >>> mov eax,1 >>> int 80h >> >>> pisz: >>> push ebp;ebp na stos >>> mov ebp,esp >>> pushfd >>> push esi >>> push eax >> >>> mov esi,[ebp+4] >> >> add esi,2 ;w esi adres napisu. jmp short=+ajty >> >> >> >> >> >> >> >>> mov [tmp],esi >> >>> mov eax, 4 >>> mov ebx,1 >>> mov ecx, [tmp] >>> mov edx,6 >>> int 80h >> >>> pop eax >>> pop esi >>> popfd >>> pop ebp >> >>> ret >> >>> section .data >> >> tmp dd 0 >> >> -- >> Pozdrawiam - Grzechu >> Linux x86_64 > > dzieki zapodpowiedz podzialalo - tylko nie zabardzo rozumiem czemu > tego skoku nie ma w tym przykladzie :http://www.google.com/url? > sa=D&q=http://rudy.mif.pg.gda.pl/~bogdro/linux/linux08.html Bo nie taki by� zamiar. To procedura "pisz" ma sama "przeskoczy�" sobie o tyle bajt�w w prz�d w kodzie programu, ile wynosi�a d�ugo�� napisu (i tak te� robi w oryginale biblioteki). Tak wi�c kod call pisz db "qwerty",0; wypisz zmienna jest, przy tych za�o�eniach, jak najbardziej prawid�owy. Jedynym minusem mo�e by� to, �e czasem pr�ba nawet odczytania danych z sekcji kodu mo�e spowodowa� zamkni�cie programu. Podane przez Ciebie rejestry k�adzie si� na stos, gdy� s� one modyfikowane wewn�trz procedury. -- Pozdrawiam/Regards - Bogdan (GNU/Linux & FreeDOS) Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 www.Xiph.org www.TorProject.org Soft (EN): miniurl.pl/bogdro-soft
Re: naruszenie ochrony pamieci - dlaczego
Author: yesma
Date: Sun, 12 Jun 2011 14:34
Date: Sun, 12 Jun 2011 14:34
47 lines
693 bytes
693 bytes
panki pisze: [...] > ps. moze to trywialne pytanie ale dlaczego kladzie sie ebp na stos(a > tak�e eax i esi, pushfd) > ;~~~~~~~~~~~~~~~~~~~~ ;te procedury odkladaja na stos ;wszystkie rejestry ktorych uzywaja wewnatrz PROC1: push eax mov eax,1 call PROC2 add eax,1 ;eax==2 pop eax ret ;~~~~~~~~~~ PROC2: push eax mov eax,4 pop eax ret ;~~~~~~~~~~~~~~~~~~~~ ;a te procedury odkladaja na stos ;te rejestry ktore beda im potrzebne nie zmienione ;po instrukcji call PROC1: mov eax,1 push eax call PROC2 pop eax add eax,1 ;eax==2 ret ;~~~~~~~~~~ PROC2: mov eax,4 ret ;~~~~~~~~~~~~~~~~~~~~ ;poczytaj "Konwencje wywo�ania" -- Pozdrawiam - Grzechu Linux x86_64
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