一、Windows?95?DDK的安裝?
?
安裝Windows?95?DDK一般需要先安裝Win32?SDK,原因是Windows?95?DDK?
需要Win32?SDK的16位資源編譯器,但是Win32?SDK很大(一整張光盤(pán)?
的容量),而且國(guó)內(nèi)難以買(mǎi)到,ftp站上也較少見(jiàn),即使有,下載也很困難。?
筆者經(jīng)過(guò)一段時(shí)間的摸索,找到了安裝Windows?95?DDK的幾種簡(jiǎn)單方法,?
現(xiàn)將方法介紹如下:?
方法之一:使用第三方資源編譯器?
1、修改注冊(cè)表,仿真Win32?SDK已經(jīng)安裝的情況。?
建立一個(gè)名為WIN32SDK.REG的注冊(cè)表文件,內(nèi)容為:?
?
REGEDIT4?
?
[HKEY_USERS\.Default\Software\Microsoft\Win32SDK]?
?
[HKEY_USERS\.Default\Software\Microsoft\Win32SDK\Directories]?
"Install?Dir"="C:\\MSTOOLS"?
?
在資源管理器中雙擊此文件,將此文件中的內(nèi)容添加到注冊(cè)表。就可以安?
裝Windows?95?DDK了。?
2、運(yùn)行Windows?95?DDK中的SETUP.EXE文件,安裝Windows?95?DDK到?
C:\DDK。?
3、安裝MASM?6.11到C:\MASM611,安裝完成后將未安裝的Windows?95?DDK?
中的MASM611C目錄下的文件覆蓋到C:\MASM611\BIN。?
4、安裝Visual?C++?5.0(4.0也可以,但不宜使用6.0)到C:\Program?
Files\DevStudio\VC。?
5、建立C:\MSTOOLS\BINW16目錄,拷貝資源編譯器。?
Windows?95?DDK需要一個(gè)能將Win32資源源文件編譯成16位資源的資源?
編譯器。如果有Win32?SDK,可以將BINW16目錄下的文件直接拷貝到?
C:\MSTOOLS\BINW16,如果沒(méi)有Win32?SDK,則可以使用第三方的資源編譯?
器,這里以使用Borland的資源編譯器為例:?
準(zhǔn)備Turbo?MASM?5.0一套,用UNPAK工具解壓縮CMDLINE.PAK文件,找?
到下面三個(gè)文件:?
?
BRC.EXE?
BRCC32.EXE?
RW32CORE.DLL?
?
將這三個(gè)文件拷貝到C:\MSTOOLS\BINW16,并將BRC.EXE改名為RC.EXE即?
可。?
6、修改CONFIG.SYS增大環(huán)境變量空間。?
在CONFIG.SYS文件最后加入一行:?
?
SHELL=C:\WINDOWS\COMMAND.COM?/E:8192?/P?
?
7、進(jìn)入Windows?95?MS-DOS方式,初始化編譯環(huán)境(最好建立一個(gè)批處?
理文件):?
?
C:\MASM611\BINR\NEW-VARS.BAT?
C:\DDK\DDKINIT.BAT?32?BASE?
(編譯的設(shè)備驅(qū)動(dòng)程序不同,參數(shù)也不同)?
C:\Program?Files\DevStudio\VC\bin\VCVARS32.BAT?
?
就可以使用Windows?95?DDK了,連接時(shí)出現(xiàn)的警告可以不理會(huì)。?
方法之二:使用Windows?98?DDK?
完整版的Windows?98?DDK(約30M)包括Windows?95?DDK、全套SDK編譯?
器和MASM?6.11C匯編器,安裝方法非常簡(jiǎn)單:安裝Windows?98?DDK和Visual?
C++?5.0,然后直接運(yùn)行“Check?Build?Environment”(編譯帶調(diào)試信息?
的設(shè)備驅(qū)動(dòng)程序)或者“Free?Build?Environment”(編譯正式發(fā)布版本?
的設(shè)備驅(qū)動(dòng)程序)程序項(xiàng)即可。?
?
二、一個(gè)攔截Windows?95/98文件操作的VxD?
?
VxD——虛擬設(shè)備驅(qū)動(dòng)程序,顧名思義,VxD是用來(lái)控制硬件設(shè)備的,那么?
這里為什么要講一個(gè)攔截Windows?95/98文件操作的VxD呢?其實(shí),VxD?
不僅僅可以用來(lái)控制硬件設(shè)備,因?yàn)閂xD工作在80386保護(hù)模式Ring?0?
特權(quán)級(jí)(最高特權(quán)級(jí))上,而一般的應(yīng)用程序工作在Ring?3特權(quán)級(jí)(最?
低特權(quán)級(jí))上,所以VxD可以完成許多API不能完成的功能,例如端口讀?
寫(xiě)、物理內(nèi)存讀寫(xiě)、中斷調(diào)用、API攔截等。正因?yàn)槿绱耍琕xD在Windows?
系統(tǒng)編程中有廣泛用途,其實(shí)大家一般都是碰到Windows?API不能解決或?
者難以解決的問(wèn)題才考慮編寫(xiě)VxD解決問(wèn)題。?
這里介紹的攔截Windows?95/98文件操作的VxD可以用來(lái)攔截Windows?95?
/98(Windows?NT不支持VxD)的所有文件操作,那么這個(gè)VxD有什么用?
途呢?最大的用途可能是——病毒防火墻,用來(lái)對(duì)文件操作進(jìn)行過(guò)濾,可?
以進(jìn)行動(dòng)態(tài)病毒檢測(cè)和動(dòng)態(tài)殺毒。這個(gè)VxD使用的原理和目前流行的CIH?
病毒傳染的原理是基本相同的。?
(其實(shí)大家如果要問(wèn)我為什么要寫(xiě)這么一個(gè)VxD,那是因?yàn)椤沂荲irus?
版的版主啦)?
該VxD的文件名是FILEHOOK.VXD,源程序(FILEHOOK.ASM)如下:?
?
;FILEHOOK.VXD--攔截Windows?95/98文件操作的VxD?
?
.386p?
?
.XLIST?
?
INCLUDE?VMM.Inc?
INCLUDE?VWin32.Inc?
INCLUDE?Shell.Inc?
?
MASM=1?
?
INCLUDE?IFS.Inc?
INCLUDE?IFSMgr.Inc?
?
.LIST?
?
;VxD聲明?
?
Declare_Virtual_Device?
FILEHOOK,1,0,VxD_Control,Undefined_Device_ID,,,?
?
;保護(hù)模式數(shù)據(jù)段?
?
VxD_DATA_SEG?
?Prev_File_System_Api_Hook?dd?0?
?In_File_System_Api_Hook?db?0?
?Message1?db?'Open?file?!',0?
?Caption1?db?'FILEHOOK',0?
VxD_DATA_ENDS?
?
;保護(hù)模式代碼段?
?
VxD_CODE_SEG?
?
;系統(tǒng)控制過(guò)程?
?
BeginProc?VxD_Control?
?Control_Dispatch?SYS_DYNAMIC_DEVICE_INIT,VxD_Device_Init?
?Control_Dispatch?SYS_DYNAMIC_DEVICE_EXIT,VxD_Device_Exit?
?Control_Dispatch?W32_DEVICEIOCONTROL,VxD_IOCTL?
?clc?
?ret?
EndProc?VxD_Control?
?
;IOCTL?控制(設(shè)備I/O控制)過(guò)程?
?
BeginProc?VxD_IOCTL?
?;獲取DeviceIoControl控制代碼?
?mov?ecx,[esi.dwIoControlCode]?
?cmp?ecx,1?
?jz?Install_File_System_Api_Hook?
?cmp?ecx,2?
?jz?Uninstall_File_System_Api_Hook?
?jmp?VxD_IOCTL_Exit?
?
;安裝文件系統(tǒng)API?鉤子?
?
Install_File_System_Api_Hook:?
?mov?eax,OFFSET32?File_System_Api_Hook?
?VxDCall?IFSMgr_InstallFileSystemApiHook?
?or?eax,eax?
?jz?Error_Handler?
?;保存上一個(gè)文件系統(tǒng)API?鉤子地址?
?mov?Prev_File_System_Api_Hook,eax?
?jmp?VxD_IOCTL_Exit?
?
;移去文件系統(tǒng)API?鉤子?
?
Uninstall_File_System_Api_Hook:?
?mov?eax,OFFSET32?File_System_Api_Hook?
?VxDCall?IFSMgr_RemoveFileSystemApiHook?
?cmp?eax,0FFFFFFFFH?
?jz?Error_Handler?
?jmp?VxD_IOCTL_Exit?
?
;IOCTL?控制過(guò)程結(jié)束?
?
VxD_IOCTL_Exit:?
?xor?eax,eax?
?clc?
?ret?
?
;錯(cuò)誤處理?
?
Error_Handler:?
?mov?eax,0FFFFFFFFH?
?stc?
?ret?
EndProc?VxD_IOCTL?
?
;VxD_Device_Exit過(guò)程?
?
BeginProc?VxD_Device_Exit?
?clc?
?ret?
EndProc?VxD_Device_Exit?
?
;文件系統(tǒng)API?鉤子過(guò)程(C語(yǔ)言調(diào)用方式)?
?
BeginProc?File_System_Api_Hook,CCALL?
?ArgVar?FSDFnAddr,DWORD?
?ArgVar?FunctionNum,DWORD?
?ArgVar?Drive,DWORD?
?ArgVar?ResourceFlags,DWORD?
?ArgVar?CodePage,DWORD?
?ArgVar?pir,DWORD?
?EnterProc?
?pushad?
?;防止重入?
?cmp?byte?ptr?In_File_System_Api_Hook,00h?
?jnz?Prev_Hook?
?;比較是打開(kāi)文件操作嗎??
?cmp?dword?ptr?FunctionNum,IFSFN_OPEN?
?jnz?Prev_Hook?
?;設(shè)置重入標(biāo)志?
?inc?byte?ptr?In_File_System_Api_Hook?
?;取當(dāng)前VM句柄?
?VMMCall?Get_Cur_VM_Handle?
?;顯示消息框?
?mov?eax,MB_ICONASTERISK+MB_OK?
?mov?ecx,OFFSET32?Message1?
?mov?edi,OFFSET32?Caption1?
?mov?esi,0?
?mov?edx,0?
?VxDCall?Shell_Message?
?;取消重入標(biāo)志?
?dec?byte?ptr?In_File_System_Api_Hook?
?
;轉(zhuǎn)到上一個(gè)文件系統(tǒng)API?鉤子地址?
?
Prev_Hook:?
?popad?
?LeaveProc?
?mov?eax,Prev_File_System_Api_Hook?
?jmp?[eax]?
?Return?
EndProc?File_System_Api_Hook?
?
VxD_CODE_ENDS?
?
;保護(hù)模式初始化代碼段?
?
VxD_ICODE_SEG?
?
;VxD_Device_Init過(guò)程?
?
BeginProc?VxD_Device_Init?
?clc?
?ret?
EndProc?VxD_Device_Init?
?
VxD_ICODE_ENDS?
?
end?
?
該VxD在設(shè)備控制過(guò)程(VxD_Control過(guò)程)中處理了3個(gè)系統(tǒng)控制消息,?
分別是SYS_DYNAMIC_DEVICE_INIT(動(dòng)態(tài)VxD初始化)、?
SYS_DYNAMIC_DEVICE_EXIT(動(dòng)態(tài)VxD退出)和W32_DEVICEIOCONTROL(設(shè)?
備I/O控制),對(duì)應(yīng)的消息處理過(guò)程分別是VxD_Device_Init、?
VxD_Device_Exit和VxD_IOCTL。其中VxD_Device_Init過(guò)程和?
VxD_Device_Exit過(guò)程只清除進(jìn)位標(biāo)志返回(表示成功),VxD_IOCTL過(guò)程?
是Windows?95/98應(yīng)用程序與VxD通信的接口,完成文件系統(tǒng)API鉤子?
的安裝和移去工作,[esi.dwIOControlCode]中是設(shè)備I/O控制代碼,該?
控制代碼為1時(shí)安裝文件系統(tǒng)API鉤子,為2時(shí)移去文件系統(tǒng)API鉤子。?
File_System_Api_Hook是文件系統(tǒng)API鉤子過(guò)程,這里作為一個(gè)簡(jiǎn)單的實(shí)?
例,鉤子過(guò)程判斷是否是打開(kāi)文件操作,如果是則顯示一個(gè)簡(jiǎn)單的消息框,?
然后跳轉(zhuǎn)到上一個(gè)文件鉤子(相當(dāng)于舊的文件系統(tǒng)API入口)。如果需要?
擴(kuò)充功能,可以在該過(guò)程中增加代碼。?
匯編連接VxD需要一個(gè)模塊定義文件和一個(gè)NMAKE文件(手工匯編連接當(dāng)?
然也可以)。這兩個(gè)文件都可以直接用DDK中的GENERIC實(shí)例中的模塊定?
義文件和NMAKE文件修改而成,模塊定義文件(FILEHOOK.DEF)如下:?
?
VXD?FILEHOOK?DYNAMIC?
?
DESCRIPTION?'File?System?API?Hook?Program'?
?
SEGMENTS?
????_LPTEXT?????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_LTEXT??????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_LDATA??????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_TEXT???????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_DATA???????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????CONST???????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_TLS????????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_BSS????????CLASS?'LCODE'???PRELOAD?NONDISCARDABLE?
????_LMSGTABLE??CLASS?'MCODE'???PRELOAD?NONDISCARDABLE?IOPL?
????_LMSGDATA???CLASS?'MCODE'???PRELOAD?NONDISCARDABLE?IOPL?
????_IMSGTABLE??CLASS?'MCODE'???PRELOAD?DISCARDABLE?IOPL?
????_IMSGDATA???CLASS?'MCODE'???PRELOAD?DISCARDABLE?IOPL?
????_ITEXT??????CLASS?'ICODE'???DISCARDABLE?
????_IDATA??????CLASS?'ICODE'???DISCARDABLE?
????_PTEXT??????CLASS?'PCODE'???NONDISCARDABLE?
????_PMSGTABLE??CLASS?'MCODE'???NONDISCARDABLE?IOPL?
????_PMSGDATA???CLASS?'MCODE'???NONDISCARDABLE?IOPL?
????_PDATA??????CLASS?'PDATA'???NONDISCARDABLE?SHARED?
????_STEXT??????CLASS?'SCODE'???RESIDENT?
????_SDATA??????CLASS?'SCODE'???RESIDENT?
????_DBOSTART???CLASS?'DBOCODE'?PRELOAD?NONDISCARDABLE?CONFORMING?
????_DBOCODE????CLASS?'DBOCODE'?PRELOAD?NONDISCARDABLE?CONFORMING?
????_DBODATA????CLASS?'DBOCODE'?PRELOAD?NONDISCARDABLE?CONFORMING?
????_16ICODE????CLASS?'16ICODE'?PRELOAD?DISCARDABLE?
????_RCODE??????CLASS?'RCODE'?
?
EXPORTS?
????????FILEHOOK_DDB?@1?
?
NMAKE文件(MAKEFILE)如下:?
?
!ifdef?MASTER_MAKE?
BUILD_BITS=32?
BUILD_TYPE=base?
!INCLUDE?$(DDKROOT)\master.mk?
!endif?
?
NAME?=?filehook?
?
#?supply?the?location?of?a?16-bit?linker?
?
LINK?=?
?
#???????Definitions?for?the?debug?level?
?
!ifdef?DEBUG?
DDEBUG??=-DDEBLEVEL=1?-DDEBUG?
!else?
DDEBUG??=-DDEBLEVEL=0?
!endif?
?
#???????Definitions?for?MASM?6?Assembler?
?
ASM????=?ml?
AFLAGS?=?-coff?-DBLD_COFF?-DIS_32?-W2?-c?-Cx?-Zm?-DMASM6?$(DDEBUG)?
ASMENV?=?ML?
LFLAGS?=?/VXD?/NOD?
?
#???????MASM?6?only?inference?rules?
?
.asm.obj:?
?set?$(ASMENV)=$(AFLAGS)?
?$(ASM)?-Fo$*.obj?$
?
all?:?$(NAME).VXD?
?
OBJS?=?filehook.obj?
?
filehook.obj:?filehook.asm?
?
$(NAME).vxd:?$(NAME).def?$(OBJS)?
????????link?@<<$(NAME).lnk?
$(LFLAGS)?
/OUT:$(NAME).vxd?
/MAP:$(NAME).map?
/DEF:$(NAME).def?
$(OBJS)?
<
????????mapsym?-s?-o?$(NAME).sym?$(NAME).map?
?
clean:?
?-@del?*.obj?
?-@del?*.vxd?
?-@del?*.exp?
?-@del?*.lib?
?-@del?*.map?
?-@del?*.sym?
?
有了這兩個(gè)文件,運(yùn)行NMAKE即可匯編連接VxD。?
?
三、Windows?95/98應(yīng)用程序與VxD的通信?
?
Windows?95/98應(yīng)用程序與VxD的通信一般使用DeviceIoControl函數(shù),?
這里給出一個(gè)實(shí)例源程序(FHTEST.C)如下:?
?
//攔截Windows?95/98文件操作測(cè)試程序?
?
#include?
#include?"tchar.h"?
?
#define?INSTALL_FILE_SYSTEM_API_HOOK?1?
#define?UNINSTALL_FILE_SYSTEM_API_HOOK?2?
?
static?TCHAR?szAppName[]=_T("FHTEST");?
static?TCHAR?szAppTitle[]=_T("攔截Windows?95/98文件操作測(cè)試程?
序");?
static?HANDLE?hDevice;?
?
LRESULT?CALLBACK?WndProc(HWND?hWnd,UINT?Message,WPARAM?
wParam,LPARAM?lParam);?
?
int?WINAPI?WinMain(HINSTANCE?hInstance,HINSTANCE?
hPrevInstance,LPSTR?lpCmdLine,int?nCmdShow)?
{?
?HWND?hWnd;?
?WNDCLASSEX?wcex;?
?MSG?Msg;?
?//本程序不能在Windows?NT中運(yùn)行?
?if(GetVersion()<0x80000000)?
?{?
??MessageBox(NULL,_T("本程序不能在Windows?NT中運(yùn)行!?
"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
??return?FALSE;?
?}?
?if(!hPrevInstance)?
?{?
??wcex.cbSize=sizeof(WNDCLASSEX);?
??wcex.style=CS_HREDRAW|CS_VREDRAW;?
??wcex.lpfnWndProc=WndProc;?
??wcex.cbClsExtra=0;?
??wcex.cbWndExtra=0;?
??wcex.hInstance=hInstance;?
??wcex.hIcon=LoadIcon(hInstance,IDI_APPLICATION);?
??wcex.hCursor=LoadCursor(NULL,IDC_ARROW);?
??wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);?
??wcex.lpszMenuName=NULL;?
??wcex.lpszClassName=szAppName;?
??wcex.hIconSm=LoadIcon(hInstance,IDI_APPLICATION);?
??if(!RegisterClassEx(&wcex))?return?FALSE;?
?}?
?hWnd=CreateWindow(szAppName,szAppTitle,WS_OVERLAPPEDWINDOW,?
?
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,?
???????0,0,hInstance,NULL);?
?if(!hWnd)?return?FALSE;?
?ShowWindow(hWnd,nCmdShow);?
?UpdateWindow(hWnd);?
?while(GetMessage(&Msg,0,0,0))?
?{?
??TranslateMessage(&Msg);?
??DispatchMessage(&Msg);?
?}?
?return?Msg.wParam;?
}?
?
LRESULT?CALLBACK?WndProc(HWND?hWnd,UINT?Message,WPARAM?
wParam,LPARAM?lParam)?
{?
?HDC?hDC;?
?PAINTSTRUCT?ps;?
?DWORD?cb;?
?BOOL?bResult;?
?switch(Message)?
?{?
?case?WM_CREATE:?
?
?hDevice=CreateFile("\\\\.\\FILEHOOK.VXD",0,0,NULL,0,FILE_FLA?
G_DELETE_ON_CLOSE,NULL);?
??if(hDevice!=INVALID_HANDLE_VALUE)?
??{?
?
?bResult=DeviceIoControl(hDevice,INSTALL_FILE_SYSTEM_API_HOOK,?
NULL,0,NULL,0,&cb,0);?
???if(bResult)?MessageBox(hWnd,_T("文件系統(tǒng)API?鉤子安裝?
成功!"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
???else?MessageBox(hWnd,_T("不能安裝文件系統(tǒng)API?鉤子!?
"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
??}?
??else?
??{?
???MessageBox(hWnd,_T("不能打開(kāi)FILEHOOK.VXD!?
"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
??}?
??break;?
?case?WM_PAINT:?
??hDC=BeginPaint(hWnd,&ps);?
??EndPaint(hWnd,&ps);?
??break;?
?case?WM_DESTROY:?
??if(hDevice!=INVALID_HANDLE_VALUE)?
??{?
?
?bResult=DeviceIoControl(hDevice,UNINSTALL_FILE_SYSTEM_API_HO?
OK,NULL,0,NULL,0,&cb,0);?
???if(bResult)?MessageBox(hWnd,_T("文件系統(tǒng)API?鉤子移去?
成功!"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
???else?MessageBox(hWnd,_T("不能移去文件系統(tǒng)API?鉤子!?
"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
???CloseHandle(hDevice);?
??}?
??else?
??{?
???MessageBox(hWnd,_T("不能打開(kāi)FILEHOOK.VXD!?
"),szAppTitle,MB_ICONINFORMATION|MB_OK);?
??}?
??PostQuitMessage(0);?
??break;?
?default:?
??return?DefWindowProc(hWnd,Message,wParam,lParam);?
?}?
?return?0;?
}?
?
本程序使用CreateFile函數(shù)動(dòng)態(tài)裝載VxD,然后用DeviceIoControl函數(shù)?
向VxD發(fā)送設(shè)備I/O控制代碼,安裝和移去文件系統(tǒng)API鉤子,最后用?
CloseHandle函數(shù)動(dòng)態(tài)移去VxD。?
運(yùn)行該程序時(shí),如果文件系統(tǒng)API鉤子安裝成功,會(huì)顯示出“文件系統(tǒng)API?
鉤子安裝成功!”的消息框,然后只要進(jìn)行打開(kāi)文件操作,就會(huì)顯示出“Open?
File?!”的消息框。退出該程序時(shí),如果文件API鉤子移去成功,會(huì)顯示?
出“文件API鉤子移去成功!”的消息框,以后進(jìn)行打開(kāi)文件操作時(shí)不再?
顯示消息框。?
?
四、小結(jié)?
?
上述實(shí)例演示了一個(gè)完整的攔截Windows?95/98文件系統(tǒng)API的VxD和?
Windows?95/98應(yīng)用程序與該VxD通信的方法。該VxD可以作為一個(gè)基本?
框架,稍作修改即可用于病毒防火墻等軟件。其實(shí)VxD的功能遠(yuǎn)不止這些,?
充分利用VxD的功能可以編寫(xiě)出許多用API不能編寫(xiě)出的高級(jí)應(yīng)用程序。?
本教程只是一個(gè)簡(jiǎn)單的VxD編程例子,因?yàn)楣P者水平所限,加之時(shí)間較少,?
寫(xiě)得較為簡(jiǎn)單,還請(qǐng)大家見(jiàn)諒,同時(shí)也歡迎大家討論。本教程中使用的VMM?
功能、VxD功能和API函數(shù)請(qǐng)查閱相關(guān)手冊(cè)或者幫助。?
VXD編程入門(mén)教程
- VXD(10209)
相關(guān)推薦
FPGA入門(mén)教程
FPGA入門(mén)教程 FPGA 入門(mén)教程 1 .?dāng)?shù)字電路設(shè)計(jì)入門(mén) 2 .FPGA 簡(jiǎn)介 3 .FPGA 開(kāi)發(fā)流程 4 .RTL設(shè)計(jì) 5 .QuartusⅡ設(shè)計(jì)實(shí)例 6.ModelSim和Testbench
2012-08-11 11:40:44
Labview小白,求一份入門(mén)教程和教材
Labview小白,現(xiàn)在想學(xué)習(xí)這個(gè),求一份入門(mén)教程和教材,非常感謝!
2017-06-10 22:56:04
Linux下C語(yǔ)言編程入門(mén)教程
u3000本文是Linux 下C 語(yǔ)言編程入門(mén)教程。主要介紹了Linux 的發(fā)展與特點(diǎn)、C語(yǔ)言的基礎(chǔ)知識(shí)、Linux 程序設(shè)計(jì)基礎(chǔ)知識(shí)及其下C 語(yǔ)言編程環(huán)境、Linux 程序設(shè)計(jì)的特點(diǎn)及其下C 語(yǔ)言
2023-09-22 06:56:10
proteus入門(mén)教程
proteus入門(mén)教程,新手實(shí)用?。?/div>
2013-07-29 15:31:08
哪位大俠有l(wèi)abview的入門(mén)教程???
哪位大俠有l(wèi)abview的入門(mén)教程啊?,有的話發(fā)我郵箱啊,謝謝。shengshm1989@163.com
2012-03-11 23:13:26
求 labview實(shí)用入門(mén)教程
`本人因病掉課,現(xiàn)在已經(jīng)跟不上進(jìn)度,求 labview實(shí)用入門(mén)教程,多例題,講解清晰,謝?。。。。?!`
2012-02-09 05:22:31
求ARM入門(mén)教程
誰(shuí)那里有較全的ARM入門(mén)教程,麻煩發(fā)一份到我的郵箱去,gd_binliao@163.com萬(wàn)分感激
2013-01-24 21:24:09
VxD編程
VxD編程
一、VxD介紹 本文介紹VxD的作用。如果Windows 95提供的標(biāo)準(zhǔn)VxD對(duì)你的硬件或者 軟件不能提供100%的兼容支持,你需要為你的硬件或者軟件(包
2008-09-12 10:17:511742
VxD入門(mén)教程
VxD入門(mén)教程1.背景知識(shí) 為了看懂本篇所給的例子,需要C, 匯編及Windows 設(shè)備驅(qū)動(dòng)程序的相關(guān)知識(shí)。
2008-09-12 10:20:061738
單片機(jī)入門(mén)教程第25課-鍵盤(pán)接口與編程
單片機(jī)入門(mén)教程第25課-鍵盤(pán)接口與編程
鍵盤(pán)是由若干按鍵組成的開(kāi)關(guān)矩陣,它是微型計(jì)算機(jī)最常用的輸入設(shè)備,用戶可以通過(guò)鍵盤(pán)向計(jì)算機(jī)輸入指
2010-01-07 15:19:21746
單片機(jī)入門(mén)教程第23課-常用接口電路及其編程
單片機(jī)入門(mén)教程第23課-常用接口電路及其編程
LED數(shù)碼顯示器的連接與編程 在單片機(jī)系統(tǒng)中,通常用LED數(shù)碼顯示器來(lái)顯示各種數(shù)字或符
2010-01-07 15:37:251105
單片機(jī)入門(mén)教程第22課-串行口應(yīng)用編程實(shí)例
單片機(jī)入門(mén)教程第22課-串行口應(yīng)用編程實(shí)例
1. 串口方式0應(yīng)用編程 8051單片機(jī)串行口方式0為移位寄存器方式,外接一個(gè)串入并出的移位寄存器,
2010-01-07 15:40:131223
Mentor EN入門(mén)教程
本內(nèi)容詳細(xì)介紹了Mentor EN入門(mén)教程,本內(nèi)容是PPT格式,歡迎大家學(xué)習(xí)
2011-05-10 15:11:400
硬件工程師入門(mén)教程
硬件工程師入門(mén)教程硬件工程師入門(mén)教程硬件工程師入門(mén)教程硬件工程師入門(mén)教程硬件工程師入門(mén)教程
2016-01-05 15:53:18240
C語(yǔ)言入門(mén)教程
很好的C語(yǔ)言入門(mén)教程,可以肯定的說(shuō)這個(gè)教程只是為初學(xué)或入門(mén)者準(zhǔn)備的
2016-01-22 14:46:527
51單片機(jī)c51語(yǔ)言入門(mén)教程C語(yǔ)言入門(mén)教程
51單片機(jī)c51語(yǔ)言入門(mén)教程,C語(yǔ)言入門(mén)教程
2016-08-29 15:02:0330
PLC編程是什么?圖解PLC編程入門(mén)教程
本文開(kāi)始介紹了PLC編程的概念和PLC編程的七大特點(diǎn),其次闡述了PLC編程工作原理與PLC的五種標(biāo)準(zhǔn)編程語(yǔ)言,最后介紹了PLC編程入門(mén)教程。
2018-04-19 08:42:5464219
C語(yǔ)言入門(mén)教程之C語(yǔ)言編程實(shí)例源代碼資料免費(fèi)下載
本文檔的主要內(nèi)容詳細(xì)介紹的是C語(yǔ)言入門(mén)教程之C語(yǔ)言編程實(shí)例源代碼資料免費(fèi)下載。
2018-12-06 08:00:0031
STM32單片機(jī)入門(mén)教程之GPIO編程的詳細(xì)資料說(shuō)明
本文檔的主要內(nèi)容詳細(xì)介紹的是STM32單片機(jī)入門(mén)教程之GPIO編程的詳細(xì)資料說(shuō)明。
2020-06-28 15:09:0057
Linux下C語(yǔ)言編程入門(mén)教程詳細(xì)說(shuō)明
本文是Linux 下C 語(yǔ)言編程入門(mén)教程。主要介紹了Linux 的發(fā)展與特點(diǎn)、C語(yǔ)言的基礎(chǔ)知識(shí)、Linux 程序設(shè)計(jì)基礎(chǔ)知識(shí)及其下C 語(yǔ)言編程環(huán)境、Linux 程序設(shè)計(jì)的特點(diǎn)及其下C 語(yǔ)言編程風(fēng)格等。
2020-08-25 18:05:0039
單片機(jī)c語(yǔ)言編程入門(mén)教程
單片機(jī)c語(yǔ)言編程入門(mén)教程說(shuō)難不難,說(shuō)易不易,學(xué)習(xí)單片機(jī)c語(yǔ)言首先就要明白這兩樣?xùn)|西是啥?單片機(jī)入門(mén)編程主要是學(xué)C語(yǔ)言,其次就是電路跟編程語(yǔ)言。
2021-07-29 10:39:1617545
評(píng)論
查看更多