[英]How can 64-bit pointer fit into 4 bytes in x86_64 assembler
我目前正在閱讀以下博客,以了解如何編寫匯編程序。 我了解博客中的所有內容,但我一無所知。
https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
碼:
0x0000000100000f50 <main+0>: push %rbp
0x0000000100000f51 <main+1>: mov %rsp,%rbp
0x0000000100000f54 <main+4>: mov $0x0,%eax
0x0000000100000f59 <main+9>: movl $0x0,-0x4(%rbp)
我不明白為什么我們可以將零寫入-0x4(%rbp)。 在第1行,我們將保存在寄存器%rbp中的指針壓入堆棧。 由於%rbp寄存器的大小為64位,我以后會期望我們必須將0寫入堆棧中的-0x8(%rbp)位置,而不是-0x4(%rbp),后者僅為4字節(32位)。
誰能解釋一下?
提前致謝。
由於此時%rsp
和%rbp
相等,因此-0x4(%rbp)
在紅色區域中位於堆棧指針下方 。 這是信號處理程序(和調試器)未觸及的區域,因此即使它位於堆棧指針下方也可以使用。
movl
指令存儲一個int
,一個32位的數量,而不是一個64位的機器字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.