How to Dynamically Allocate Memory Using Assembly and System Calls Under Linux

后端 未结 4 439
予麋鹿
予麋鹿 2021-01-31 17:53

I\'m looking for some good code examples of dynamic memory allocation using an assembly language under Linux and using system calls, not malloc and friends.

What are som

相关标签:
4条回答
  • 2021-01-31 18:04

    Use the brk system call to change the end of your data segment.

    Take a look here: http://www.linuxjournal.com/article/6390 to understand what you're doing.

    0 讨论(0)
  • 2021-01-31 18:05

    On Linux mmap2 is a sensible system call to use for this at a low level. It takes 6 arguments, so in IA32 you can call it using:

        mov eax, 192    ; mmap2
        xor ebx, ebx    ; addr = NULL
        mov ecx, 4096   ; len = 4096
        mov edx, $7     ; prot = PROT_READ|PROT_WRITE|PROT_EXEC
        mov esi, $22    ; flags = MAP_PRIVATE|MAP_ANONYMOUS
        mov edi, -1     ; fd = -1
        xor ebp, ebp    ; offset = 0 (4096*0)
        int $80         ; make call
    

    (See the relevant kernel source for details on the parameter passing)

    I built this with NASM and verified it worked using strace, which produced:

    mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xf77ae000
    
    0 讨论(0)
  • 2021-01-31 18:16

    brk(2). And take a look at ELF.

    0 讨论(0)
  • 2021-01-31 18:19

    An alternative to brk() is to use the mmap() system call, with MAP_ANONYMOUS | MAP_PRIVATE.

    0 讨论(0)
提交回复
热议问题