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)
しかし、それは同じ結果 "x"の3倍だけを出力します。
ヒープサイズを大きくするにはどうすればよいですか? the man page for int brk(void *addr);
describesのNOTES部として
なぜそれが第三の呼び出しで 'InicialHeap'に格納されている値を追加し、2番目の呼び出しで100を追加しますが、ないだろうか? –
straceでプログラムを再実行して結果を投稿できますか?例えば、 'strace。/ a.out'のようにします。 Straceはすべてのシステムコールを出力し、パラメータをデコードし、戻り値を表示してデコードします。あなたのOSは何ですか? linuxでは、brkは少し奇妙です:http://linux.die.net/man/2/brk。 – osgx
この質問への回答ではありませんが、このSOの回答にNASM(Not GNU assembler)を使用している32ビットコード(64ビットではない)の例があります:http://stackoverflow.com/a/33903235/3857942コードは 'brk' 32ビットシステムコールを使用しますが、そのコード内のアイデアは最小限の労力でアセンブラ内の64ビットシステムコールを使用するように適応可能でなければなりません。 –