无法更改AMD64的堆大小

时间:2016-06-19 05:35:42

标签: assembly heap-memory brk

我试图通过更改brk来将堆大小增加100,我不知道为什么我的代码不起作用。
以下是尝试执行此操作的代码部分:

movq $0, %rdi
movq $12, %rax
syscall
movq %rax, InicialHeap

movq InicialHeap, %rsi
mov $str, %rdi
call printf

movq $100, %rdi
movq $12, %rax
syscall

movq %rax, %rsi
mov $str, %rdi
call printf

movq InicialHeap, %rdi
movq $12, %rax
syscall

movq InicialHeap, %rsi
mov $str, %rdi
call printf

movq $60, %rax
syscall

该程序应该打印如下:
x(打印InicialHeap)
x + 100(打印InicialHeap + 100)
x(打印InicialHeap)
但它只打印3次相同的结果“x”。
如何增加堆大小?

1 个答案:

答案 0 :(得分:0)

作为the man page for int brk(void *addr); describes的NOTES部分,系统调用(__NR_brk = 12)实际上实现了brk(),而不是sbrk,但返回当前的中断而不是整数。

作为@osgx评论,请尝试在strace下运行您的程序,以查看您获得的返回值。例如从strace /bin/true开始,您可以看到动态链接器通过使用brk(0)来查找当前中断是正常的:

brk(0)                                  = 0x24c6000

从那里,您应该保存返回值,然后拨打brk()并向其发出偏移量。

您当前的代码显然不起作用:

movq $100, %rdi
movq $12, %rax
syscall             ;;  brk((void*)100)