【发布时间】:2016-06-19 05:35:42
【问题描述】:
我试图通过更改 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(打印初始堆)
x + 100(打印初始堆 + 100)
x(打印初始堆)
但它只打印 3 次相同的结果“x”。
我必须做些什么来增加我的堆大小?
【问题讨论】:
-
为什么在第二次调用时会加100,而在第三次调用时却不加
InicialHeap中存储的值? -
你能用 strace 重新运行你的程序并发布结果吗?例如,
strace ./a.out。 Strace 将打印所有系统调用,解码它们的参数并显示和解码返回值。你的操作系统是什么?在 linux 中 brk 有点奇怪:linux.die.net/man/2/brk. -
虽然不是这个问题的答案,但可以在这个 SO 答案中找到一些使用 NASM(非 GNU 汇编器)的示例 32 位代码(不是 64 位):stackoverflow.com/a/33903235/3857942。该代码确实使用了
brk32 位系统调用,但该代码中的想法应该能够以最小的努力适应在您的汇编器中使用 64 位系统调用。 -
你在为什么操作系统编程?
标签: assembly heap-memory brk