mmap segmentation fault

Jilles Tjoelker jilles at stack.nl
Thu Apr 12 19:37:11 UTC 2012


On Fri, Apr 13, 2012 at 12:25:32AM +0530, Maninya M wrote:
> I want to allocate memory at a specified address location 'a' of size 'b'.
> I wrote code below to do it, but I'm getting a seg fault. How can I solve
> this?
> How can I get the allocated memory at the required address?

> int main()
> {
> unsigned int *addr,*newaddr;
> unsigned long a=134516736,a1;
> unsigned long b=3895296;
> unsigned long flags =6;
> a1=(a&0xffff0000);
> printf("%x\n",(void *)a);
> newaddr=(unsigned int *)mmap((void *)a,b,6,MAP_ANONYMOUS|MAP_FIXED,-1,0);

> if(newaddr==MAP_FAILED)
> printf("mmap failed");
> else
> printf("sucess %x",newaddr);
> return 0;
> }

> Output is
> 8049000
> Segmentation fault

If this is i386, you're mapping onto the executable itself. If you
really want to map something there, you will have to move your code
somewhere else or manipulate your executable to contain a suitable
memory area at the required address.

Try, for example,
  procstat -v $$

-- 
Jilles Tjoelker


More information about the freebsd-hackers mailing list