簡體   English   中英

ASM x86-將值移入內存

[英]ASM x86 - Move value into memory

我正在使用32位Linux系統,但我不明白如何將值放入內存。 這是一個例子:

str:    .asciz "AAA"
p:    .long 0

.text
.globl  main

main:
    movl $str, p    #Save the address of str into p (?)

我知道我可以移動movl $str, %eax來將str地址存儲在eax寄存器中,但是我不能用p做同樣的事情,因為我收到分段錯誤錯誤。

我也嘗試了這種替代方法,但結果始終是分段錯誤:

main:
call self
self:
    pop %ebp
    movl $str, (p-self) (%ebp)

有人可以向我解釋如何正確使用mov嗎? 我還想知道是否有可能在編譯時將str地址存儲到p中。

有人可以向我解釋如何正確使用mov嗎?

它不是關於mov 沒關系。 您需要指定一個部分以將數據放入其中。 在程序的前面添加.data ,以將其放在.data節中。 否則,默認情況下會將數據放入.text節,這在現代OS上是只讀的。 對其進行寫入會導致分段錯誤。

我還想知道是否有可能在編譯時將str地址存儲到p中。

有可能的:

p: .long str

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM