虛擬記憶體獲取其他程序資料的問題

2022-09-16 20:39:14 字數 499 閱讀 3164

想在自己程序中獲取其他程序裡的樹形控制項(systreeview32)的內容。比如使用tvm_getitem訊息獲取某一節點資料。

思路很簡單,由於是將訊息發給另乙個程序來處理,傳遞的指標的值應該是相對於目標程序位址空間中的,所以需要把在目標程序中申請空間。

virtualallocex(m_hprocess, null, sizeof(t), mem_commit, page_readwrite);

當我在使用tvm_getitem訊息時卻發現sendmessage返回值是0,目標程序處理訊息失敗了,最大的可能就是我們申請的記憶體有問題。

google了一下,還真找到了帖子,上面說windows公用控制項(common controls)訊息處理是區分unicode和ascii編碼的,而且還要考慮目標程序是否是64位程序,32位和64位某些資料型別長度是不同的。

將自己寫的程序改為64位,終於返回1了。

程序的虛擬記憶體

程序屬性資訊的task struct結構體,其中包含程序使用的記憶體資訊。在32位的作業系統中,當程序建立的時候 程式執行時 系統會為每乙個程序分配大小為4gb的虛擬記憶體空間,用於儲存程序屬性資訊。c語言中的變數,通常使用 運算子來獲得其位址,那麼,這個位址就是虛擬位址,在簡單的微控制器中,編寫的...

讀取其他程序的資料

typedef struct tagwndinfo wndinfo,lpwndinfo bool callback myenumproc hwnd hwnd,lparam lparam 列舉所有程序 if iswindowvisible hwnd 當前視窗是否可見 return true hwnd ...

Linux程序的虛擬記憶體

使用者程序的虛擬位址空間是linux的乙個重要的抽象 它為每個執行程序提供了同樣的系統檢視,這使得多個程序可以同時執行,而不會干擾到其他程序記憶體中的內容。每個應用程式都有自己的線性位址空間,與所有其他應用程式隔開。各程序虛擬位址空間起始於0,延伸到task sieze 1,其上是核心位址空間。使用...