0
我试图通过更改brk将堆大小增加100,我不知道为什么我的代码无法工作。
这里是代码的一部分,试图做到这一点:无法更改堆大小AMD64
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”。
我需要做些什么来增加我的堆大小?
为什么会加100在第二个电话,但不能添加存储在'InicialHeap'在第三个电话的价值? –
你可以重新运行你的程序strace和发布结果?例如,'strace。/ a.out'。 Strace将打印所有系统调用,解码其参数并显示和解码返回值。你的操作系统是什么?在linux brk中有点奇怪:http://linux.die.net/man/2/brk。 – osgx
虽然不是对这个问题的回答,但是可以在这个SO回答中找到一些使用NASM(非GNU汇编程序)的示例32位代码(不是64位):http://stackoverflow.com/a/33903235/3857942。该代码确实使用'brk' 32位系统调用,但该代码中的想法应该适用于在汇编器中使用64位系统调用,而且花费最少。 –