[英]Access (read/write) to virtual memory process from another application
我有簡單的程序:
#include <stdio.h>
int a = 5;
int
main(void)
{
while(1)
{
int i;
sleep(1);
printf("%p %i\n", &a, a);
}
return 0;
}
輸出(Ubuntu x64):
0x601048 5
0x601048 5
0x601048 5
0x601048 5
我正在學習C語言中的指針,並且我已經知道您可以使用memcpy
在進程的虛擬內存中隨時隨地(幾乎)寫入數據。 但是,是否有可能通過使用另一個應用程序(當然使用自己的虛擬內存)來修改位於0x601048
地址的int a
值? 這個怎么做? 我只對C語言的解決方案感興趣。
這不容易實現(在Linux上的兩個不同進程之間共享虛擬內存)。 作為第一個近似值,請盡可能編碼。
而且即使您確實共享了這種內存,也會遇到同步問題。
您確實應該閱讀Advanced Linux Programming等書籍。 關於該問題,他們有幾章(很復雜)。
通常,如果您確實要共享內存,則不會在調用堆棧上共享某些內存,但是您將“保留”一些內存區域以供以后共享。
您可以閱讀更多有關
pthread -s(例如,閱讀此pthread tutprial )
使用MAP_SHARED
使用mmap(2)設置共享內存段
使用ptrace(2)的低級調試功能,尤其是PTRACE_PEEKDATA
使用shmat(2)的舊SysV共享內存
使用shm_open(2)的 Posix共享內存(請參見shm_overview(7) ... )
/proc/
文件系統proc(5),例如/proc/$PID/mem
; 我強烈建議您首先在瀏覽器中查看file:///proc/self/maps
,然后閱讀更多內容,直到您了解顯示的內容。 (您可以mmap
其他人的進程/proc/$PID/mem
...。)
/dev/mem
(物理RAM),請參閱mem(4)
加載一個瘋狂的技巧的內核模塊。
我強烈建議初學者不要玩這種骯臟的記憶技巧 。 如果您堅持認為,請准備破壞系統並經常進行備份。 Linux新手不要玩這種技巧。
通常,您需要root
特權。 查看功能(7)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.