Re: [請益] 記憶體管理

看板Soft_Job作者時間11年前 (2012/12/14 04:26), 編輯推噓4(408)
留言12則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《jodo1984 (XDDD)》之銘言: : ※ 引述《jodo1984 (XDDD)》之銘言: : : 今天上級指示 要我想辦法弄出一支程式, 最好是VB6 (冏) : : 可以讀取電腦目前所有正在的執行應用程式 : : 記憶體內容與位置 : : 他們是說有點像遊戲修改大師, 我覺得有點像是window裝置管理員 : : 請問有前輩有寫過這種嗎? : : 可以指點一下嗎? 謝謝 : : C可以做到嗎? : 這個專案因為某些因素停擺了一陣子,現在主管又想到要我繼續開始.... : 之前已經做到可以撈到應用程式內部的記憶體資料 : 但是面臨了一些問題,想問看看前輩們有沒有類似的經驗 : 1.我是透過WINAPI去撈應用程式的資料,但是如果應用程式關掉重開或者 : 電腦重開機原本的存放內部記憶體位址就會更動(這是在XP的情況下) 與XP/W7無關 : 2.在WIN7或WIN98我所撈到的記憶體位址都是暫存的位址,原本的位址的資料 : 隨時都會更動 : 我在想是不是我透過API抓的位址資料都是虛擬位址的,所以有沒有辦法 : 直接存取到實體記憶體,請問各位前輩有類似的經驗或想法可以指點我嗎? 在WINDOWS裡所有32BIT程式都是拿到OS分配的虛擬記憶體 一般由0x400000開始為程式主體,以下為堆棧, 最大到0x7FFFFF,0x800000就到R0了 記憶體位址會變,和變數本身層級、指標、編譯器有關 以上為個人粗淺的理解,可能有錯 ----------------------------------------------------------- 你的問題和 實體/虛擬 完全無關 以一層偏移來說:表示法[[401000]+1C] 你必需先找到其基址(固定位置)如0x401000, 用ReadProcessMemory 讀出內容如:0x5B1000 <<每次都不一樣 再加上偏移0x1C = 5B101C 再由ReadProcessMemory 讀出 0x5B101C裡的內容,才是你要的 其由401000(固定位置,內容不定)稱為基址,0x1C為其偏移 實務上,你必需要先找到0x5B101C,再反向找到其基址和偏移 要如何反向找到基址,則需要有些許的ASM基礎和反組譯的經驗 和寫GAME外掛一樣,有幾個關鍵字給您參考(大陸用語) OD 反組譯軟體,Cheat Engine 記憶體修改軟體,基址,偏移 -- ████ █ ★ ████ █ █ █ █ █ █ █ █ █ 超 級 熱 烈 歡 迎 █ ████ █ █ █ ████ █ █ █ █ █ ███★ █ █ 歡迎到嘉義版! ★███ █ █ █ █ █ █ █ 訊馳電腦-路徑嘉義市林森西路496號(05)2244-526順發斜對面 ※ 編輯: chinoyan 來自: 59.127.140.29 (12/14 04:28)

12/14 12:45, , 1F
12/14 12:45, 1F

12/15 01:03, , 2F
請問您是說程式一開始執行所佔的記憶體位紙嗎?
12/15 01:03, 2F

12/15 02:28, , 3F
有沾到邊..但其實是global/static variable才是固定位址
12/15 02:28, 3F

12/15 02:29, , 4F
動態alloc或stack都是每次執行都可能不一樣
12/15 02:29, 4F

12/15 06:08, , 5F
jodo,你推文發問的方式,很難懂
12/15 06:08, 5F

12/15 06:09, , 6F
不知道你在問那一部份
12/15 06:09, 6F

12/16 23:19, , 7F
http://ppt.cc/gen.php 小算盤每次的位址都不同
12/16 23:19, 7F

12/16 23:20, , 8F
一開始我用虛擬記憶體的基底位址去推算
12/16 23:20, 8F

12/16 23:20, , 9F
但是我發覺這是不可行的(可能我用的方法不對)
12/16 23:20, 9F

12/16 23:21, , 10F
所以我才想問看看有沒有什麼方法可以讀實際記憶體位址
12/16 23:21, 10F

12/16 23:22, , 11F
12/16 23:22, 11F

12/18 13:41, , 12F
不一樣原因上面不是解釋了嗎?
12/18 13:41, 12F
文章代碼(AID): #1GoZe448 (Soft_Job)
討論串 (同標題文章)
文章代碼(AID): #1GoZe448 (Soft_Job)