簡體   English   中英

寫入內存地址

[英]Writing to memory address

以下編譯順利進行:

movl %eax, 16

並使用任何值16替換段。

我相信我讀到現代系統不允許進程寫入內存地址。 我記得正確嗎? 如果是這樣,為什么該語法在GAS中仍然存在? 如果不是,我的錯誤在哪里,如何使該行不存在段錯誤?

謝謝!

編輯:如果這是引起Kerrek SB評論的原因,則這是GNU匯編(AT&T)語法。

該指令“移動”(實際上是復制)32位(長為l )值到內存地址16。在現代OS上,該地址不可寫(您可能會嘗試讀取),因此會遇到分段錯誤。

要寫入內存,您需要一個可寫的地址,例如變量的地址。 您可以使用變量名稱(而不是通過提供絕對文字地址)來指定此名稱(請檢查匯編器和編譯器文檔中的確切語法)。 它將與文字地址一起使用,您只是不容易知道它是什么,因此無法編寫它。

因此,在現代操作系統中,寫入內存可以並且一直都在進行,這是大多數程序花費大部分實際CPU時間來完成的工作。 您只需要一個允許該進程寫入的地址即可。

暫無
暫無

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

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