2012-04-28 40 views
5

可以說內存地址0A7F03E4存儲值124。如何使用python將其更改爲300?有沒有提供這種任務的模塊?如何更改存儲在內存地址中的值?

+1

您可能需要處理內存保護。如果這是代碼或只讀數據,那麼您將無法寫入該地址。 – 2012-04-28 13:54:05

+0

你是說虛擬內存地址還是物理內存地址? – 2012-04-28 14:05:42

回答

8
>>> import ctypes 
>>> memfield = (ctypes.c_char).from_address(0x0A7F03E4) 

現在你可以閱讀memfield,分配給它,做任何你想要的。當然,只要您有權訪問該內存位置。

,你還可以得到一個memarray與

>>> memarray = (ctypes.c_char*memoryfieldlen).from_address(0x0A7F03E4) 

,讓你memfields的列表。

更新:我剛纔讀到你想檢索一個整數。在這種情況下,當然使用ctypes.c_int。一般來說:使用適當的CTYPE;)

+0

這不會給你的Python進程的虛擬內存地址,而不是物理地址?後者可能無法使用,具體取決於操作系統和進程權限。 – 2012-04-28 14:01:37

+0

當你想要訪問非數據字段或可訪問內存外的字段時,當然會得到段錯誤。 – ch3ka 2012-04-28 14:06:02

1

你有沒有試過內置ctypes模塊?它提供了一個memset函數,它應該給你你需要的東西。

1

在UNIX上,你可以嘗試open()/dev/mem設備訪問物理內存,然後使用file對象的seek()方法設置文件指針到正確的位置。然後使用write()方法更改該值。不要忘記將數字編碼爲原始字符串!

但是,通常只有root用戶才能訪問此設備。