汇编者马洛克死在我身上



我正在尝试分配两个内存块并写入其中一个(NASM,我今天更新的 Arch 上的 Linux 86_64,glibc):

        global  main
        extern  malloc
section .text
main:
        mov rdi, 5
        call malloc
        mov qword [array], rax
        mov qword [rax+24], 5 ; mov qword [rax+8], 5 or mov qword [rax+10000] doesn't die on me
        mov rdi, 5
        call malloc

section .bss
        array resq    1

当我这样做时:

nasm -felf64 test.s; gcc test.o; ./a.out

我得到:

test.out: malloc.c:2395: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Keskeytetty (luotiin core-tiedosto)

最后一行大致翻译成英语为中断(创建了一个核心文件),即核心转储)

谷歌搜索和搜索SO告诉我,我可能正在写入malloc为自己的内部使用而设置的东西。实际测试似乎证实了这一点(只有当我确实尝试编写时才会发生错误。

但是我找不到我应该做些什么来防止这种情况。有更深见的人可以告诉我应该怎么做吗?

提前谢谢你。

好的,正如Michael Petch所说,malloc似乎将其大小视为字节。所以这将起作用:

        global  main
        extern  malloc
section .text
main:
        mov rdi, 40 ; 5*8
        call malloc
        mov qword [array], rax
        mov qword [rax+24], 5 ; mov qword [rax+8], 5 or mov qword [rax+10000] doesn't die on me
        mov rdi, 5
        call malloc

section .bss
        array resq    1

相关内容

  • 没有找到相关文章

最新更新