Virtual Address Space

Madhu K madhu.sk89 at gmail.com
Mon Oct 3 01:12:15 EDT 2016


Hi All,

Thank you so much for all your answers.

Regards,
Madhu

On Sun, Oct 2, 2016 at 8:22 AM, Arshad Hussain <arshad.super at gmail.com>
wrote:

>
> On 30-Sep-2016, at 10:10 pm, Román Martínez <rgmf at riseup.net> wrote:
>
> > Hi,
> >
> > I compile main.s and it generates main.o. With objdump I can see:
> >
> > 0000000000000000 <_start>:
> >    0: b8 01 00 00 00          mov    $0x1,%eax
> >    5: bb 00 00 00 00          mov    $0x0,%ebx
> >    a: cd 80                           int    $0x80
> >
> > After link main.o it generates main. With objdump I now can see:
> >
> > 0000000000400078 <_start>:
> >   400078:     b8 01 00 00 00          mov    $0x1,%eax
> >   40007d:     bb 00 00 00 00          mov    $0x0,%ebx
> >   400082:     cd 80                           int    $0x80
> >
> > So, linker generates virtual address, doesn't it? But why it starts at
> 400078 and not in other any location? Is there any logic here? A virtual
> address can start at 0?
> >
> The linker script would normally leave out some area and _not_ start from
> 0. (although this is not
> an absolute necessity ). It will pick up and valid virtual address and
> assign start of .text,.bss and
> .stack. This is possible because we now have virtual memory. And every
> program thinks that it
> has _all_ the memory for itself.  So, 400078 is perfectly valid virtual
> address space and linker
> has chosen this for this executable.
>
> Also note that if the address space is getting shifted by little , this is
> because of the KASLR
> (layout randomisation) - If this is disabled then the linker would
> generate the same virtual
> address for all the executable every time.
>
>
>
> <snip>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20161003/3b108c1b/attachment.html 


More information about the Kernelnewbies mailing list