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位系統調用,而且花費最少。 –