首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法更改堆大小AMD64

无法更改堆大小AMD64
EN

Stack Overflow用户
提问于 2016-06-19 13:35:42
回答 1查看 103关注 0票数 0

我试图通过更改brk将堆大小增加100,但我不知道为什么我的代码不能工作。

以下是尝试执行此操作的代码部分:

代码语言:javascript
复制
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“。

我必须做什么来增加我的堆大小?

EN

回答 1

Stack Overflow用户

发布于 2016-06-19 17:34:10

正如the man page for int brk(void *addr); describes的注释部分所示,系统调用(__NR_brk = 12)实际上实现了brk(),而不是sbrk,但返回的是当前的break而不是整数。

作为@osgx的注释,试着在strace下运行你的程序,看看你得到了什么返回值。例如,在strace /bin/true中,你可以看到动态链接器通过使用brk(0)找出当前的中断来启动是正常的:

代码语言:javascript
复制
brk(0)                                  = 0x24c6000

在那里,您应该保存返回值,并使用该返回值的偏移量下一次调用brk()

你当前的代码显然不能工作:

代码语言:javascript
复制
movq $100, %rdi
movq $12, %rax
syscall             ;;  brk((void*)100)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37904260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档