2015-10-19 90 views
0

我正在使用32位Linux系統,我無法理解如何將值存入內存。 這是一個例子:ASM x86 - 將值移入內存

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

.text 
.globl main 

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

我知道,我能做的movl $str, %eax存儲EAX寄存器內的STR地址,但因爲我收到分段錯誤,我不能做p同樣的事情。

我也試過這種替代,但結果始終是一個分段錯誤:

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

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

回答

0

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

這不是關於mov。沒關係。您需要指定一個部分來放入數據。在程序的前面添加.data,將其放入.data部分。無論如何,數據默認放入.text部分,這在現代操作系統中是隻讀的。寫入它會導致分段錯誤。

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

這是可能的:

p: .long str