X86_64アセンブリを初めて使用し、brkメモリ管理プログラムを実装しようとしていますが、コードの一部の行で問題が発生しています。
.data部分:
.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)がheap_startの0でアドレス指定されたコンテンツをロードする必要があることです。ただし、完全に異なるメモリアドレスを%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
誰かが私が間違っていることを教えてもらえますか?ありがとうございました。