naruszenie ochrony pamięci, prosty program, assembler

0

Witam, prosty program mający na celu "echo". Wyświetlenie na ekranie wpisanego z klawiatury tekstu. Po odpaleniu programu, wykonuje on to co ma wykonać ale na końcu wyświetla:
Naruszenie ochrony pamięci (zrzut pamięci)
Dlaczego?

@Edit: O matko, późna godzina i mi się zapomniało kodu wrzucić :D :D Poprawiam :)

section .data
 
tekst:	times	20	db	0
tekst_dl equ	$ - tekst

section .text

global _start 
_start: 

	mov	eax, 3
	mov	ebx, 0
	mov	ecx, tekst
	mov	edx, tekst_dl
	int	80h

	mov	eax, 4
	mov	ebx, 1
	mov	ecx, tekst
	mov	edx, tekst_dl
	int	80h
1

Mamy wróżyć z kuli? Zapewne nie zakańczasz poprawnie programu więc wykonuje sie on dalej próbując "wykonać" stos albo cokolwiek co tam dalej siedzi w pamięci.

0

Na oko to brakuje jakiegoś ret czy wiecznej pętli na końcu.

1

No i to jest cały kod? No to chyba widzisz że ten kod NIE KOŃCZY PROGRAMU? Cośtam czytam, cośtam wypisujesz a potem co? Asembler leci dalej z instruction pointerem i wykonuje bajty które są dalej w pamięci ;]

1

tak jak @Shalom powiedział próbujesz wykonać dane, sprawdzić jakie, możesz w gdb prawdopodobnie część ELFa, zależy pewnie jak linkujesz, a generalnie musisz dodać
mov eax, 1
xor ebx, ebx
int 0x80

0

Okej, teraz rozumiem, w kursie assemblera to zakończenie programu nie była do końca wytłumaczone :) Teraz wszystko rozumiem, dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1