的str
的地址存儲在堆棧(可使用pop
取水的時候,它的位置無關):大會PIC
.text
str:
.string "test\n"
但現在的str
地址不在堆棧(不能使用pop
去取,但str(%rip)
(RIP相對尋址)是PIC):
.text
str:
.skip 64
這是我從我剛纔的問題中發現,
但我不明白彙編程序如何決定地址str
應該在堆棧中還是不在?
我應該使用RIP相對尋址,還是使用pop
來使它成爲PIC?
UPDATE
這是工作:
.text
call start
str:
.string "test\n"
start:
movq $1, %rax
movq $1, %rdi
popq %rsi
movq $5, %rdx
syscall
ret
但是,如果我改變popq %rsi
到lea str(%rip),%rsi
,它wlll導致段錯誤...
彙編程序不能將任何東西放在堆棧上,因爲直到運行時纔會創建堆棧。除非你把它放在那裏,否則什麼都不在。 – ughoavgfhw
@Je Rog:在這兩種情況下,'str'都與函數的代碼一起位於文本段中 - pop將不會檢索任何內容。你在問絕對和相對尋址模式之間的區別,因爲[wikipedia](http://en.wikipedia.org/wiki/Addressing_mode)有一個體面的討論嗎? – user786653
@ user786653,爲什麼這個工作如果地址沒有存儲在堆棧上?注意'popq%rsi'。 http://pastebin.com/tZ81FvZK –