turbo c 內如何讀取 memory 位址? |
答題得分者是:aftcast
|
boyce23
一般會員 發表:2 回覆:6 積分:1 註冊:2008-03-06 發送簡訊給我 |
請問大家:
現在有個作業需要讀取pc 系統memory位置 而且必須使用turbo c 來讀取像0x000fe0c1 然後把他映出來到螢幕上 我的程式寫法 #include void main() { char far *memory =(char far*)0x000fe0c1; printf("%c",memory); } 印出來的值很奇怪 -44(十進制) 這程式主要目的是要讀取bios 版本位置 ,另外我需要在完全dos下執行,所以必須使用turbo c 這方面第一次接觸,很多地方不懂 懇請各位先進,能給小弟指引迷津,弄了一陣子了,還是沒辦法出來 |
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
boyce23
一般會員 發表:2 回覆:6 積分:1 註冊:2008-03-06 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
|
boyce23
一般會員 發表:2 回覆:6 積分:1 註冊:2008-03-06 發送簡訊給我 |
|
ikk
尊榮會員 發表:4 回覆:413 積分:768 註冊:2003-06-30 發送簡訊給我 |
[code cpp] DWORD br; char *buff; long offset; int *ibuff; buff = new char [65535]; // buffer size offset = 0x000fe0c1; ReadProcessMemory(this, (void*)(0x00000000 offset), (void*)&buff[0], 65535, &br); ibuff = new int [65535]; for(unsigned int i=0;i<65535;i ) { ibuff[i] = (int)*(buff i); } sprintf(msg,"ibuff[0] = [%d]", ibuff[0] ); Memo2->Lines->Add(msg); delete [] ibuff; delete [] buff; [/code]
------
FPGA驗證, FPGA開發平台, http://smims.com |
boyce23
一般會員 發表:2 回覆:6 積分:1 註冊:2008-03-06 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
我想你對dos很不熟吧? dos時代的記憶體模式和windows3.0以後的windows很不同。dos是segmentation的管理,windows則是flat 方式。
簡單一點講,dos的記憶體表達有二種,一種叫絕對位址,一種叫邏輯位址。當然寫程式時一般都是用第二種。而這二種位址有公式轉換。 邏輯位址是由seg與offset來表示。即 seg:offset ,其中seg與offset都是16位元,也就是2byte。但dos的記憶管理只有20位元並非32位元。於是… 絕對位址(20bit) = seg*16 offset 而你所列出來的位址0x000fe0c1,這是絕對位址吧? 你該把它拆成 0xfe0c 與 0x0001的邏輯位址。然後再放入 far pointer…所以應該是 int i; char far *memory =(char far*)0xfe0c0001; for(i=0;i<4;i ) { printf("X",*memory); memory ; } ===================引 用 boyce23 文 章=================== 請問大家: 現在有個作業需要讀取pc 系統memory位置 而且必須使用turbo c 來讀取像0x000fe0c1 然後把他映出來到螢幕上 我的程式寫法 #include void main() { char far *memory =(char far*)0x000fe0c1; printf("%c",memory); } 印出來的值很奇怪 -44(十進制) 這程式主要目的是要讀取bios 版本位置 ,另外我需要在完全dos下執行,所以必須使用turbo c 這方面第一次接觸,很多地方不懂 懇請各位先進,能給小弟指引迷津,弄了一陣子了,還是沒辦法出來
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan
編輯記錄
aftcast 重新編輯於 2009-03-23 09:03:14, 註解 無‧
|
boyce23
一般會員 發表:2 回覆:6 積分:1 註冊:2008-03-06 發送簡訊給我 |
謝謝兩位先進的熱心回復,讓我的問題得以解決
抓到memory的位址了,另外我對dos真的很不熟 , turbo c也第一次用,所以請原諒我厚著臉皮一直丟問題 尋找了很多網站 ,一直不是很了解,後來我跑去 小木偶網站去看 套用debug來看對印的memory 位置,驗證turbo c printf 出來的位置 發現0x00f0e0c1 需除16 分成兩段來看,就如同先進所說的一樣 套用 先進turbo c 程式抓到了memory 位置,另外vc我也有跑過,也可得到ans結果 十分感謝,謝謝你們回答,讓我受益良多,感謝 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |