All pastes #1910506 Raw Edit

Untitled

public text v1 · immutable
#1910506 ·published 2010-07-28 23:03 UTC
rendered paste body
bits 32

section .text

mmap2 		equ 192
munmap 		equ 91 ; asm/unistd_32.h
PROT_READ 	equ 0x1
PROT_WRITE 	equ 0x2
MAP_ANONYMOUS 	equ 0x20
MAP_PRIVATE 	equ 0x02 ; bits/mman.h

; void *mmap_alloc(size_t ile [ebp+8])
global mmap_alloc
mmap_alloc:
	push	ebp
	mov		ebp,	esp ; ramka stosu
	push 	ebx
	push 	edi
	push 	esi ; rejestry zarezerwowane dla f-cji wywolujacej
	
	xor 	ebx,	ebx ; NULLujemy (ABI mowi, ze NULL == 0) void *addr
	mov 	ecx,	[ebp+8] ; size_t length - podany do funkcji parametr
	mov 	edx,	PROT_READ | PROT_WRITE ; int prot
	mov 	esi,	MAP_ANONYMOUS | MAP_PRIVATE ; int flags
	mov 	edi,	-1 ; int fd
	; w ebp powinien sie jeszcze znalezc offset, ale mmap go ignoruje i dziala
	; poprawnie bez niego, wiec w ogole go nie przekazujemy
	
	mov 	eax,	mmap2 ; numer wywolania do eax
	int 	0x80
	; wynik wywolania systemowego jest w eax, zwracamy go jako wynik funkcji
	
	pop 	esi
	pop 	edi
	pop 	ebx ; przywracamy rejestry
	mov 	esp,	ebp
	pop 	ebp
	ret ; i powracamy do f-cji wywolujacej

; int mmap_free(void* p [ebp+8],size_t ile [ebp+12])
global mmap_free
mmap_free:
	push 	ebp
	mov 	ebp,	esp
	push 	ebx
	
	mov 	eax,	munmap
	mov 	ebx,	[ebp+8]
	mov 	ecx,	[ebp+12]
	int 	0x80
	
	pop 	ebx
	mov 	esp,	ebp
	pop 	ebp
	ret