0
我是新的X86_64大会,我试图实现一个brk内存管理程序,但我有一些代码行的问题。X86_64大会从内存加载时不返回正确的值地址
。数据部分:
.section .data
heap_start: .double 0
.equ HDR_AVAIL_OFFSET, 0
.equ HDR_SIZE_OFFSET,4
.equ UNAVAILABLE, 0
.equ AVAILABLE, 1
文本段部分与该问题:
.text
alloc:
movq heap_start, %rdx
loop:
movq HDR_AVAIL_OFFSET(%rdx), %rcx
cmpq $UNAVAILABLE, %rcx
jne found_space
loop2:
movq HDR_PROX(%rdx), %rdx
cmpq %rdx, heap_start
jne loop
jmp new_brk
found_space:
cmpq HDR_SIZE_OFFSET(%rdx), %rdi
jg loop2
的问题是,HDR_AVAIL_OFFSET(%RDX)应加载由0上heap_start解决的内容。但是,它将一个完全不同的内存地址返回到%rcx。
heap_start点到所述存储器阵列我想要查询,并且所述第一元件的开始是0 当我用x/NFU检查上GDB存储器,它示出了以下内容:
(gdb) x/nfu $rdx
0x602001: 0
但经过
movq HDR_AVAIL_OFFSET(%rdx), %rcx
的RCX%是:
(gdb) print $rcx
$1 = 429496729600
可以在你告诉我我做错了什么? 谢谢。
它的工作!谢谢! :) – 2013-03-12 03:02:02