實(shí)現(xiàn)在Windows下直接讀寫內(nèi)存的方法_第1頁
實(shí)現(xiàn)在Windows下直接讀寫內(nèi)存的方法_第2頁
實(shí)現(xiàn)在Windows下直接讀寫內(nèi)存的方法_第3頁
實(shí)現(xiàn)在Windows下直接讀寫內(nèi)存的方法_第4頁
實(shí)現(xiàn)在Windows下直接讀寫內(nèi)存的方法_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、實(shí)現(xiàn)在Windows下直接讀寫內(nèi)存的方法            Windows以它一致的圖形用戶界面、完善的內(nèi)存管理等特點(diǎn),已被廣大用戶所接受,但在Windows下,計(jì)算機(jī)已運(yùn)行在保護(hù)模式,雖然Windows已提供了一整套的內(nèi)存管理函數(shù),用戶還是不可訪問指定地址的內(nèi)存,致使許多中、小型企業(yè)開發(fā)的計(jì)算機(jī)插件無法在Windows下使用,因?yàn)榫帉戲?qū)動(dòng)程序是很費(fèi)事的。他們僅希望能直接讀、寫電路板所占的內(nèi)存即可。本文介紹的是在Windows 3.1下,用Borland

2、0;C+ 3.1編程環(huán)境,實(shí)現(xiàn)用戶對(duì)內(nèi)存直接讀寫的方法,讀者不難將它移植到其它編程語言。  1.利用Windows提供的各個(gè)段選擇符標(biāo)號(hào),在C源程序中將選擇符標(biāo)號(hào)說明為外部變量。其對(duì)照表如下: 表1 2.利用宏定義MAKELONG(段內(nèi)偏移量,&段選擇符標(biāo)號(hào))即可得到一個(gè)長指針。 3.經(jīng)上述方法得到的指針與C語言中定義的指針是一樣的。 4.如果使用的段是D000H或E000H或其它上位內(nèi)存時(shí),需改動(dòng)Windows的系統(tǒng)配置文件SYSTEM.INI,利用字符編輯器,在386Enh小節(jié)中加入EmmExclude=xxxxyyyy一行,禁止Windows使用這段存儲(chǔ)空間。

3、值xxxx和yyyy是16位內(nèi)存范圍。如開發(fā)的插件占用D000H段的64K,則應(yīng)加入這樣一行:EmmExclude=d000-dfff。 利用這一方法,已使我們自己開發(fā)的電路板(占用D000H段),在Windows控制下成功地運(yùn)行了??紤]到讀者沒有相應(yīng)的硬件,這里以讀取中斷向量、計(jì)算機(jī)ROM的制造時(shí)間和對(duì)DOS用戶通訊區(qū)的讀寫為例,詳見以下程序。對(duì)于DOS用戶通訊區(qū)的內(nèi)容,讀者可用DOS的DEBUG程序檢查(D命令)和修改(E命令)。DOS的用戶通訊區(qū)在004000F0H處開始,共計(jì)16個(gè)字節(jié)。在修改時(shí)請(qǐng)注意:從004000F0H開始存放可顯示ASCII碼字符串,并以0結(jié)尾。 ; M

4、EMORY.DEF 模塊定義文件 NAME Memory DESCRIPTIONdemonstrate an intergrated menu EXETYPEWINDOWS STUBWINSTUB.EXE CODEPRELOAD MOVEABLE DISCARDABLE DATAPRELOAD MOVEABLE MULTIPLE HEAPSIZE1024 STACKSIZE8192 EXPORTSWndProc /*- MEMORY.RC 直接讀寫內(nèi)存的資源定義文件 -*/ #include "

5、memory.h" MemoryMenu MENU BEGIN POPUP"取中斷向量&I" BEGIN MENUITEM "int 0&3h", IDM-INT03H MENUITEM "int &10h", IDM-INT10H MENUITEM "int &21h", IDM-INT21H END POPUP "ROM區(qū)域&R" B

6、EGIN MENUITEM "制造時(shí)間&T", IDM-TIME MENUITEM "取用戶通訊區(qū)&U", IDM-READ MENUITEM "存用戶通訊區(qū)&S", IDM-WRITE END MENUITEM "/a退出&X", IDM-EXIT END /*- MEMORY.H 直接讀寫內(nèi)存的頭文件 -*/ #define IDM-INT03H 101 #define IDM-INT10H

7、102 #define IDM-INT21H103 #define IDM-TIME201 #define IDM-READ202 #define IDM-WRITE203 #define IDM-EXIT300 /*- MEMORY.C 用戶對(duì)固定內(nèi)存直接讀寫的表演程序 -*/ #include<windows.h> #include "memory.h" #include <dos.h> int PASCAL WinMain(HANDLE,HANDLE,LP

8、STR,int); long FAR PASCAL WndProc(HWND,UINT,UINT,LONG); /*-WinMain()-*/ int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance ,LPSTR lpszCmdLine,int nCmdShow) MSG msg; HWND hWnd; WNDCLASS wndclass; if (! hPrevInstance) wndclass.styl

9、e=CS-HREDRAW | CS-VREDRAW; wndclass.lpfnWndProc=WndProc; wndclass.cbClsExtra=0; wndclass.cbWndExtra=0; wndclass.hInstance=hInstance; wndclass.hIcon=LoadIcon(NULL,IDI-APPLICATION); wndclass.hCursor=LoadCursor(NULL,IDC-ARROW); wndclass.hbrBackground=GetStockObject(WHITE-BRUSH); wndclass.lpsz

10、MenuName="MemoryMenu" wndclass.lpszClassName="直接讀寫存儲(chǔ)器" if (! RegisterClass (&wndclass) return FALSE; hWnd=CreateWindow( "直接讀寫存儲(chǔ)器", "直接讀寫存儲(chǔ)器", WS-OVERLAPPEDWINDOW, CW-USEDEFAULT, CW-USEDEFAULT, CW-USEDEFAULT, CW-USEDEFAULT, NULL, NULL, h

11、Instance, NULL); if (! hWnd) return FALSE; ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (GetMessage(&msg,N ULL,0,0)    TranslateMessage(&msg);DispatchMessage(&msg);return msg.wParam;/*-WndProc()-*/long FAR PASCAL WndProc (HWND hWnd, U

12、INT message, UINT wParam,LONG lParam)HDChDC;HPEN hOldPen,hNewPen;RECTrect;TEXTMETRICtm;PAINTSTRUCTps;UINT i;char Strbuf50;WORD far * InterruptVector;char far * bios;extern WORD-0000H;extern WORD-0040H;extern WORD-F000H;switch (message)case WM-COMMAND:switch (wParam)case IDM-INT03H:InterruptVector=(W

13、ORD far *)MAKELONG(0,&-0000H);wsprintf(Strbuf,"向量地址:%04X:%04XH/n",*(InterruptVector+0x06),*(InterruptVector+0x07);MessageBox (hWnd,Strbuf,"int 03h", MB-OK | MB-ICONSTOP);return 0;case IDM-INT10H:InterruptVector=(WORD far *)MAKELONG(0,&-0000H);wsprintf(Strbuf,"向量地址:%04X:%04XH/n",*(InterruptVector

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論