[ glupi @ 17.06.2005. 10:59 ] @
| Imam problem sa sljedecim kodom, naime hocu alocirat memoriju sa pocetkom na 0xaa01100 (ili nekoj slicnoj slobodnoj adresi koja ce u vecini slucajeva biti slobodna), ali mmap vraca ffffffff, a errno je 22? zadnja 2 argumenta su zanemariva jer koritim MAP_ANON. Jel neko vidi problem, memorija na 0xaa01100 bi trebala biti slobodna.
Code:
#include <stdio.h>
#include <sys/mman.h>
#include <string.h>
#include <errno.h>
int main()
{
char *segment;
extern int errno;
segment=(void *)mmap((void *)0xaa01100, 0x1000, PROT_EXEC|PROT_READ|PROT_WRITE, MAP_FIXED|MAP_ANON,0x123 , 0x134);
printf("%x\n%d\n",segment,errno);
return 0;
}
|
[ itf @ 17.06.2005. 17:48 ] @
Neznam zasto se time patis? Ovo jedino ima smisla ako pises drivere za uredjaje. Tada tvoj problem se moze rijesiti upotrebom zasebnih tipova podataka (pocinju nekako sa kljucnom rijeci auto... tako nekako). Njima fiksiras varijablu na tocno odredjenu mem. lokaciju koja se oslobodi pri pokretanju tako da ju ima tvoj program...
Drugar, bolje bih ti preporucio da uzivas u automatskom managmentu memorije od strane OS-a nego da se zezas sa ovim :)
[ glupi @ 17.06.2005. 18:37 ] @
Problem je takav da mi bas treba alocirana memorija na specificnom mjestu, tako da dinamicka alokacija ne dolazi u obzir. Na raspolaganu imam samo sistemske pozive, ne mogu koristit kljucne rijeci posto ce se ovaj kod izvrsit unutar drugog programa kojem ja predajem samo sistemski poziv i parametre.
[ glupi @ 17.06.2005. 22:37 ] @
Naso sam problem, ispustio sam MAP_PRIVATE kod deklaracije.
[ itf @ 20.06.2005. 08:27 ] @
Pa vjerovatno se to moglo i preko Dll-a da nemas zahebavanja sa prevodjenjem (preko dinamickog linka), ali cemu komplikacije...
[ Sundance @ 21.06.2005. 05:55 ] @
mmap() je *nix-style API....nema tu dll-ova :)
na win32 VirtualAlloc() također prima kao jedan od parametara željenu adresu za alokaciju. To se recimo koristi za exploitanje nekih bugova u driverima.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.