🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
8 messages
8 total messages Started by panki Sat, 11 Jun 2011 05:07
naruszenie ochrony pamieci - dlaczego
#2421
Author: panki
Date: Sat, 11 Jun 2011 05:07
50 lines
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
#2424
Author: panki
Date: Sat, 11 Jun 2011 14:27
71 lines
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
#2422
Author: Wojciech =?UTF-8
Date: Sat, 11 Jun 2011 17:45
22 lines
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
#2423
Author: yesma
Date: Sat, 11 Jun 2011 20:19
57 lines
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
#2425
Author: panki
Date: Sun, 12 Jun 2011 00:37
70 lines
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
#2426
Author: "Wiktor S."
Date: Sun, 12 Jun 2011 10:37
17 lines
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
#2427
Author: "Bogdan (bogdro)
Date: Sun, 12 Jun 2011 12:06
87 lines
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
#2428
Author: yesma
Date: Sun, 12 Jun 2011 14:34
47 lines
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