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

如何判斷記憶體內的值是變數?

答題得分者是:dllee
xformer2
一般會員


發表:2
回覆:2
積分:0
註冊:2007-08-11

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-12 11:45:35 IP:203.79.xxx.xxx 訂閱

我標題下的不好 但是不太容易在一行內說明清楚
有一Labview寫的控制軟體 讀取壓力值然後顯示出來
我想用Borland C Builder寫程式 抓它記憶體(想抓那個壓力值)
(在此只是以Labview為例 希望有方法也能夠適用於應用程式)
在我的觀念中 視窗應用程式執行時 每個元件的屬性
都會存在於記憶體中
譬如一個 Edit元件的字串 "123" 在記憶體某個地方存其ascii碼
譬如一個自設變數int a=3; 在記憶體某個地方存成3
那麼Labview顯示數值的元件 在記憶體裡某個地方儲存著這個值
有上網搜尋到 讀取記憶體的api
但不知道記憶體哪裡才是紀錄我要找的那個變數
也不知道要取用幾個byte
希望能夠提供一些關鍵字或意見
謝謝
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-13 22:51:20 IP:59.105.xxx.xxx 訂閱
如果是用 LabView 它應該有輸出的元件,把值輸出到檔案或REG,再由自己的程式去讀。
如果要查別人程式內的資料,如果是視窗屬性的資料,可參考:列出所有視窗及視窗內所有子視窗資料
如果不是,說真的,不太容易,有時可以說不太可能。
如果資料沒有特別處理,使用 GameMaster/GameBuster/遊戲剋星 之類的軟體去找到記憶體位址,
再使用讀取別人程式記憶體的 API (ReadProcessMemory) 去讀那個位址,即可得到資料。
如果資料有特別處理,使用遊戲剋星也找不到記憶體位址,都沒位址了更別說如何去讀了。
------
http://www.ViewMove.com
xformer2
一般會員


發表:2
回覆:2
積分:0
註冊:2007-08-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-14 12:39:07 IP:163.29.xxx.xxx 訂閱
謝謝你提供的資料,我研究看看

P.S. Labview功能蠻強的,可以提供dll 和 activeX 等供其他程式利用,將其內部數值傳出 不是問題
只是平常沒有用到Labview 所以不打算特地學習 而且我遇到的情況是這樣: 該Labview程式是不會寫Labview
只會操作的公務員在使用 怕有問題 所以不會同意去改原始碼 但是有一個步驟需要反覆輸入數值的單調性工作 我覺得很麻煩
希望寫一個程式自動去輸入 也因此需要 Labview內部的數值作為判斷標準來決定 輸入時機

查過Labview程式的類別是 LVDchild 好像跟一般寫視窗軟體產生的不同
所以會想直接從記憶體下手
查過讀取寫入記憶體的相關資料及API ReadProcessMemory() 等等
不過你必須給它讀取幾個byte的參數 表示你自己要知道你要讀的是char int 或 float ......
這也讓我好奇 GameMaster 如何知道哪些值屬於什麼類型
(譬如你要改黃金的量 原本是140 GameMaster會找出一堆140 的可能位址 但是它如何決定一次是取多少byte
140 有可能是以int 存 或 float 存)

再次謝謝你的回應 已經給我很大的方向
本問題再放個幾天 如果沒有其他人有建議
我就結案囉
dllee
站務副站長


發表:321
回覆:2519
積分:1711
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-14 17:29:19 IP:220.134.xxx.xxx 訂閱
GameMaster 在運作時,就是去 ReadProcessMemory(), 以輸入的資料去搜尋。
以 1Byte, 2Bytes, 4Bytes, 8Bytes 為單位都有,都去搜尋,因為最後滿足的應該
只有一個位址,而那個位址找到,自然您可以依照經驗去判斷它的資料長度,
例如智力可能只有 0-100 那用 1Byte 就好,就算遊戲真的是用 2Bytes 或更多Bytes
去存,反正有效的就只有那 1Byte 能定址到它, 改它就好了。
大部分遊戲的數值會使用整數去存,主要是運算速度考量,大部分 GameMaster
都是找整數而已,也許現在也有可以找浮點數的吧(好多年沒用了),或許也還沒有,
因為如果每個位址都要用浮點數去試試可能要試很久吧,因為亂數值以浮點去解釋
可能會 Exception。

當然,要寫一個 GameMaster 也不是那麼簡單,在搜尋的功夫上要作好,不然,
輸入個值等個半天,再輸入值又等半天,最後還說找不到!! 那還是把時間放在遊戲
本身上就好。
------
http://www.ViewMove.com
xformer2
一般會員


發表:2
回覆:2
積分:0
註冊:2007-08-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-14 19:55:17 IP:163.29.xxx.xxx 訂閱
雖然實作細節還得花一些時間
不過有dllee提供的原始碼作為參考
以及觀念上的說明
目前有比較具體的方向了

再次感謝
系統時間:2024-11-24 11:10:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!