Re: Current break round up

Frank Kotler <[email protected]> Wed, 01 Oct 2008 16:27:29 -0400
Newsgroups org.kernel.vger.linux-assembly
Message-ID <[email protected]>
Kircsi Tibor wrote:
> Hi,
> 
> I may have misunderstood what you wrote, but I took a probe: (debugged
> with cgdb)
> 
> .include "../sharedlibs/linux.s"
> 
> .section .text
>         .globl  _start
> _start:
>         movl    %esp, %ebp
> 
>         # 1st brk call
>         movl    $0, %ebx                # %ebx = 0, get the current
> curret_break
>         movl    $SYS_BRK, %eax
>         int     $INT                    # %eax = address of
> current_break
> 
>         # 2nd brk call
>         addl    $0x1002, %eax           # add 4098 to current
> current_break
>         movl    %eax, %ebx              # %ebx = the address of the new
> current_break
>         movl    $SYS_BRK, %eax
>         int     $INT
> 
>         # 3rd brk call
>         movl    $0, %ebx
>         movl    $SYS_BRK, %eax
>         int     $INT
> 
>         # 4th brk call
>         movl    $SYS_BRK, %eax
>         int     $INT
> 
>         # 5th brk call
>         movl    $SYS_BRK, %eax
>         int     $INT
> 
>         # sys_exit
>         movl    $0, %ebx                # set the return value of the
> program
>         movl    $SYS_EXIT, %eax
>         int     $INT
> 
> addresses:
> 1st - 0x8049000 it's OK, because linux loads programs into the 0x8048000
> virtual address space, so this is the first page
> 2nd - 0x804a002 not aligned to 0x804b000
> 3rd - 0x804a002 same
> 4th - same
> 5th - same
> 
> That's ok, after the 2nd brk I just always ask for the current break
> with %ebx = 0. So, it seems unaligned return after the 4th call too.

Hi Tibor,
(sorry I called you "Kircsi")
I didn't mean that sys_brk aligned itself "automatically" by repeated 
calls. I ASSume that, unseen in the "strace" output, %ebx is being 
aligned "by hand" to a page boundary before that last sys_brk.

>> Randall Hyde wrote:

BTW, Randy, I ASSumed that you intended to reply to the list. Ya gotta 
hit "reply all" or it goes just to the sender...

I don't disagree that sys_mmap (or sys_mmap2?) is a better bet for 
allocating memory, but it isn't much use for "exploring" sys_brk...

Best,
Frank