全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3283
推到 Plurk!
推到 Facebook!

關於VirtualQueryEx()

尚未結案
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-12 22:31:55 IP:61.223.xxx.xxx 未訂閱
hi all ... 小弟最近在站上看了一些修改記憶體程式的資料.. 找到一些關於readprocess() , writeprocess() , VirtualQueryEx()的討論  其中提到要找出某某process的位置必須先用VirtualQueryEx()搭配MORY_BASIC_INFORMATION去找出可能位置 ...    SIZE_T VirtualQueryEx(   HANDLE hProcess,   LPCVOID lpAddress,   PMEMORY_BASIC_INFORMATION lpBuffer,   SIZE_T dwLength );    typedef struct _MEMORY_BASIC_INFORMATION {   PVOID BaseAddress;   PVOID AllocationBase;   DWORD AllocationProtect;   SIZE_T RegionSize;   DWORD State;   Protect;   DWORD Type; } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;    我大概試了一下 ... 搜尋範圍由 0k ~ 接近2G位址 ... 慢慢累加RegionSize 並將每次MEMORY_BASIC_INFORMATION的內容紀錄下來 ... 但是我不知道如何由MEMORY_BASIC_INFORMATION內容去判斷這是否為該Process所擁有的記憶體位置?    希望我的描述不會太差 ..< > 煩請有經驗的會員分享一下 , 謝謝!< >
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-13 00:57:35 IP:61.230.xxx.xxx 未訂閱
rollboy 您好:    不知道您是否已經參考過下列這兩篇討論與 tomtomtom 發表的作品了?如果沒有的話,仔細瀏覽一下,應該會有所獲的: 請教有關 VirtualQueryEx() 的用法 http://delphi.ktop.com.tw/topic.php?topic_id=45251 ReadProcessMemory()在2K/XP回傳失敗 http://delphi.ktop.com.tw/topic.php?topic_id=28068 讀取指定執行中程式的記憶體內容 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52200 7 天天敲鍵盤 v 時時按滑鼠 8 發表人 - RedSnow 於 2005/08/13 01:00:26
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-14 10:29:06 IP:218.165.xxx.xxx 未訂閱
hi RedSnow .. 老實說這三篇討論我都有參考過... 在寫這程式之前我有找過站上及網路上的相關文章 看了很多資料, 我覺得自己的想法跟站上的討論有一些出入 先提供我的Source Code ..
     
    TListItem *ListItem;
    HWND hWnd;
    DWORD ProcessId;
    HANDLE hProcess;
    PVOID pvAddress = (void*)0x0;
    MEMORY_BASIC_INFORMATION MBI;
    AnsiString WinTitle = InputBox("System", "Input Window Title", "");
    hWnd = FindWindow(NULL, WinTitle.c_str());        if( !hWnd )
        ShowMessage(WinTitle.c_str()   AnsiString(" does not exist"));
    else{
        ListView1->Clear();
        memset(&MBI, 0, sizeof(MBI));
        GetWindowThreadProcessId(hWnd, &ProcessId);
        hProcess = OpenProcess(PROCESS_ALL_ACCESS, false, (unsigned long)ProcessId);            while( VirtualQueryEx(hProcess, pvAddress, &MBI, sizeof(MBI)) ){
            ListItem = ListView1->Items->Add();
            ListItem->Caption = ProcessId;
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.BaseAddress, 2));
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.AllocationBase, 2));
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.AllocationProtect, 2));
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.RegionSize, 2));
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.State, 2));
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.Protect, 2));
            ListItem->SubItems->Add("0x"   IntToHex((int)MBI.Type, 2));                (int)pvAddress  = MBI.RegionSize;
        }
    }
    CloseHandle(hProcess);
}
底下是一個VB Source Code, 撰寫方式跟我蠻像的... http://www.hosp.ncku.edu.tw/~cww/html/q00534.html 現在很疑惑, 所以又跑來問問大家, 希望能確定一下VirtualQueryEx()的用法! 我想關鍵應該在於MEMORY_BASIC_INFORMATION的內容 ... 不知道大家看法如何 ... 先謝謝RedSnow嘍 發表人 -
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-18 19:07:41 IP:218.165.xxx.xxx 未訂閱
還有什麼方法可以明確找出某某process在記憶體中佔用的位置位址嗎?
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-20 21:31:54 IP:219.84.xxx.xxx 未訂閱
rollboy你好: 你大概忘了作業系統中process的定義。process和thread最大的不同在記憶體空間的分隔與共用。每個process都有自已的0~4G的記憶體空間。在這個觀念下,你找到的所有記憶體資訊都是屬於單一個process,(VirtualQueryEx的第一個參數)
rollboy
一般會員


發表:8
回覆:16
積分:9
註冊:2005-04-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-20 23:14:27 IP:218.165.xxx.xxx 未訂閱
引言: rollboy你好: 你大概忘了作業系統中process的定義。process和thread最大的不同在記憶體空間的分隔與共用。每個process都有自已的0~4G的記憶體空間。在這個觀念下,你找到的所有記憶體資訊都是屬於單一個process,(VirtualQueryEx的第一個參數)
Oh .. 天啊!我一直以為0~4G的Virtual Memory是共用的, 以為所有Process都會被分配同一個Virtual Memory內!看來我對於Process跟Virtual Memory的認知是錯誤的!! 謝謝 > 發表人 -
系統時間:2024-04-19 15:44:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!