青草久久影院-青草久久伊人-青草久久久-青草久久精品亚洲综合专区-SM双性精跪趴灌憋尿调教H-SM脚奴调教丨踩踏贱奴

17站長(zhǎng)網(wǎng)

17站長(zhǎng)網(wǎng) 首頁(yè) 安全 安全教程 查看內(nèi)容

看黑客怎樣匯編創(chuàng)建簡(jiǎn)單的窗口

2022-9-24 12:58| 查看: 2288 |來(lái)源: 互聯(lián)網(wǎng)

理論: Windows 程序中,在寫(xiě)圖形用戶界面時(shí)需要調(diào)用大量的標(biāo)準(zhǔn) Windows Gui 函數(shù)。其實(shí)這對(duì)用戶和程序員來(lái)說(shuō)都有好處,對(duì)于用戶,面對(duì)的是同一套標(biāo)準(zhǔn)的窗口,對(duì)這些窗口的操作都是一樣的,所以使用不同的應(yīng)用程
理論: Windows 程序中,在寫(xiě)圖形用戶界面時(shí)需要調(diào)用大量的標(biāo)準(zhǔn) Windows Gui 函數(shù)。其實(shí)這對(duì)用戶和程序員來(lái)說(shuō)都有好處,對(duì)于用戶,面對(duì)的是同一套標(biāo)準(zhǔn)的窗口,對(duì)這些窗口的操作都是一樣的,所以使用不同的應(yīng)用程序時(shí)無(wú)須重新學(xué)習(xí)操作。對(duì)程序員來(lái)說(shuō),這些 Gui 源代碼都是經(jīng)過(guò)了微軟的嚴(yán)格測(cè)試,隨時(shí)拿來(lái)就可以用的。當(dāng)然至于具體地寫(xiě)程序?qū)τ诔绦騿T來(lái)說(shuō)還是有難度的。為了創(chuàng)建基于窗口的應(yīng)用程序,必須嚴(yán)格遵守規(guī)范。作到這一點(diǎn)并不難,只要用模塊化或面向?qū)ο蟮木幊谭椒纯伞? 下面我就列出在桌面顯示一個(gè)窗口的幾個(gè)步驟: 得到您應(yīng)用程序的句柄(必需);
得到命令行參數(shù)(如果您想從命令行得到參數(shù),可選);
注冊(cè)窗口類(必需,除非您使用 Windows 預(yù)定義的窗口類,如 MessageBox 或 dialog box;
產(chǎn)生窗口(必需);
在桌面顯示窗口(必需,除非您不想立即顯示它);
刷新窗口客戶區(qū);
進(jìn)入無(wú)限的獲取窗口消息的循環(huán);
如果有消息到達(dá),由負(fù)責(zé)該窗口的窗口回調(diào)函數(shù)處理;
如果用戶關(guān)閉窗口,進(jìn)行退出處理。
相對(duì)于單用戶的 DOS 下的編程來(lái)說(shuō),Windows 下的程序框架結(jié)構(gòu)是相當(dāng)復(fù)雜的。但是 Windows 和 DOS 在系統(tǒng)架構(gòu)上是截然不同的。Windows 是一個(gè)多任務(wù)的操作系統(tǒng),故系統(tǒng)中同時(shí)有多個(gè)應(yīng)用程序彼此協(xié)同運(yùn)行。這就要求 Windows 程序員必須嚴(yán)格遵守編程規(guī)范,并養(yǎng)成良好的編程風(fēng)格。 內(nèi)容: 下面是我們簡(jiǎn)單的窗口程序的源代碼。在進(jìn)入復(fù)雜的細(xì)節(jié)前,我將提綱挈領(lǐng)地指出幾點(diǎn)要點(diǎn): 您應(yīng)當(dāng)把程序中要用到的所有常量和結(jié)構(gòu)體的聲明放到一個(gè)頭文件中,并且在源程序的開(kāi)始處包含這個(gè)頭文件。這么做將會(huì)節(jié)省您大量的時(shí)間,也免得一次又一次的敲鍵盤。目前,最完善的頭文件是 hutch 寫(xiě)的,您可以到 hutch 或我的網(wǎng)站下載。您也可以定義您自己的常量和結(jié)構(gòu)體,但最好把它們放到獨(dú)立的頭文件中
用 includelib 指令,包含您的程序要引用的庫(kù)文件,譬如:若您的程序要調(diào)用 "MessageBox",您就應(yīng)當(dāng)在源文件中加入如下一行: includelib user32.lib 這條語(yǔ)句告訴 MASM 您的程序?qū)⒁玫揭恍┮霂?kù)。如果您不止引用一個(gè)庫(kù),只要簡(jiǎn)單地加入 includelib 語(yǔ)句,不要擔(dān)心鏈接器如何處理這么多的庫(kù),只要在鏈接時(shí)用鏈接開(kāi)關(guān) /LIBPATH 指明庫(kù)所在的路徑即可。
在其它地方運(yùn)用頭文件中定義函數(shù)原型,常數(shù)和結(jié)構(gòu)體時(shí),要嚴(yán)格保持和頭文件中的定義一致,包括大小寫(xiě)。在查詢函數(shù)定義時(shí),這將節(jié)約您大量的時(shí)間;
在編譯,鏈接時(shí)用makefile文件,免去重復(fù)敲鍵。
.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib ; calls to functions in user32.lib and kernel32.lib
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib WinMain proto :DWORD,:DWORD,:DWORD,:DWORD .DATA ; initialized data
ClassName db "SimpleWinClass",0 ; the name of our window class
AppName db "Our First Window",0 ; the name of our window .DATA? ; Uninitialized data
hInstance HINSTANCE ? ; Instance handle of our program
CommandLine LPSTR ?
.CODE ; Here begins our code
start:
invoke GetModuleHandle, NULL ; get the instance handle of our program.
; Under Win32, hmodule==hinstance mov hInstance,eax
mov hInstance,eax
invoke GetCommandLine ; get the command line. You don't have to call this function IF
; your program doesn't process the command line.
mov CommandLine,eax
invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT ; call the main function
invoke ExitProcess, eax ; quit our program. The exit code is returned in eax from WinMain. WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
LOCAL wc:WNDCLASSEX ; create local variables on stack
LOCAL msg:MSG
LOCAL hwnd:HWND mov wc.cbSize,SIZEOF WNDCLASSEX ; fill values in members of wc
mov wc.style, CS_HREDRAW or CS_VREDRAW
mov wc.lpfnWndProc, OFFSET WndProc
mov wc.cbClsExtra,NULL
mov wc.cbWndExtra,NULL
push hInstance
pop wc.hInstance
mov wc.hbrBackground,COLOR_WINDOW 1
mov wc.lpszMenuName,NULL
mov wc.lpszClassName,OFFSET ClassName
invoke LoadIcon,NULL,IDI_APPLICATION
mov wc.hIcon,eax
mov wc.hIconSm,eax
invoke LoadCursor,NULL,IDC_ARROW
mov wc.hCursor,eax
invoke RegisterClassEx, addr wc ; register our window class
invoke CreateWindowEx,NULL,\
ADDR ClassName,\
ADDR AppName,\
WS_OVERLAPPEDWINDOW,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
CW_USEDEFAULT,\
NULL,\
NULL,\
hInst,\
NULL
mov hwnd,eax
invoke ShowWindow, hwnd,CmdShow ; display our window on desktop
invoke UpdateWindow, hwnd ; refresh the client area .WHILE TRUE ; Enter message loop
invoke GetMessage, ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage, ADDR msg
invoke DispatchMessage, ADDR msg
.ENDW
mov eax,msg.wParam ; return exit code in eax
ret
WinMain endp WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_DESTROY ; if the user closes our window
invoke PostQuitMessage,NULL ; quit our application
.ELSE
invoke DefWindowProc,hWnd,uMsg,wParam,lParam ; Default message processing
ret
.ENDIF
xor eax,eax
ret
WndProc endp end start 分析: 看到一個(gè)簡(jiǎn)單的 Windows 程序有這么多行,您是不是有點(diǎn)想撤? 但是您必須要知道的是上面的大多數(shù)代碼都是模板而已,模板的意思即是指這些代碼對(duì)差不多所有標(biāo)準(zhǔn) Windows 程序來(lái)說(shuō)都是相同的。在寫(xiě) Windows 程序時(shí)您可以把這些代碼拷來(lái)拷去,當(dāng)然把這些重復(fù)的代碼寫(xiě)到一個(gè)庫(kù)中也挺好。其實(shí)真正要寫(xiě)的代碼集中在 WinMain 中。這和一些 C 編譯器一樣,無(wú)須要關(guān)心其它雜務(wù),集中精力于 WinMain 函數(shù)。唯一不同的是 C 編譯器要求您的源代碼有必須有一個(gè)函數(shù)叫 WinMain。否則 C 無(wú)法知道將哪個(gè)函數(shù)和有關(guān)的前后代碼鏈接。相對(duì)C,匯編語(yǔ)言提供了較大的靈活性,它不強(qiáng)行要求一個(gè)叫 WinMain 的函數(shù)。 下面我們開(kāi)始分析,您可得做好思想準(zhǔn)備,這可不是一件太輕松的活。 .386
.model flat,stdcall
option casemap:none WinMain proto :DWORD,:DWORD,:DWORD,:DWORD include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib 您可以把前三行看成是"必須"的. .386告訴MASN我們要用80386指令集。
. model flat,stdcall告訴MASM 我們用的內(nèi)存尋址模式,此處也可以加入stdcall告訴MASM我們所用的參數(shù)傳遞約定。 接下來(lái)是函數(shù) WinMain 的原型申明,因?yàn)槲覀兩院笠玫皆摵瘮?shù),故必須先聲明。我們必須包含 window.inc 文件,因?yàn)槠渲邪罅恳玫降某A亢徒Y(jié)構(gòu)的定義,該文件是一個(gè)文本文件,您可以用任何文本編輯器打開(kāi)它, window.inc還沒(méi)有包含所有的常量和結(jié)構(gòu)定義,不過(guò) hutch 和我一直在不斷加入新的內(nèi)容。
本文最后更新于 2022-9-24 12:58,某些文章具有時(shí)效性,若有錯(cuò)誤或已失效,請(qǐng)?jiān)诰W(wǎng)站留言或聯(lián)系站長(zhǎng):17tui@17tui.com
·END·
站長(zhǎng)網(wǎng)微信號(hào):w17tui,關(guān)注站長(zhǎng)、創(chuàng)業(yè)、關(guān)注互聯(lián)網(wǎng)人 - 互聯(lián)網(wǎng)創(chuàng)業(yè)者營(yíng)銷服務(wù)中心

免責(zé)聲明:本站部分文章和圖片均來(lái)自用戶投稿和網(wǎng)絡(luò)收集,旨在傳播知識(shí),文章和圖片版權(quán)歸原作者及原出處所有,僅供學(xué)習(xí)與參考,請(qǐng)勿用于商業(yè)用途,如果損害了您的權(quán)利,請(qǐng)聯(lián)系我們及時(shí)修正或刪除。謝謝!

17站長(zhǎng)網(wǎng)微信二維碼

始終以前瞻性的眼光聚焦站長(zhǎng)、創(chuàng)業(yè)、互聯(lián)網(wǎng)等領(lǐng)域,為您提供最新最全的互聯(lián)網(wǎng)資訊,幫助站長(zhǎng)轉(zhuǎn)型升級(jí),為互聯(lián)網(wǎng)創(chuàng)業(yè)者提供更加優(yōu)質(zhì)的創(chuàng)業(yè)信息和品牌營(yíng)銷服務(wù),與站長(zhǎng)一起進(jìn)步!讓互聯(lián)網(wǎng)創(chuàng)業(yè)者不再孤獨(dú)!

掃一掃,關(guān)注站長(zhǎng)網(wǎng)微信

大家都在看

    熱門排行

      最近更新

        返回頂部
        主站蜘蛛池模板: 成人国产在线不卡视频 | 日韩做A爰片久久毛片A片毛茸茸 | 麻豆一二三区果冻 | 公粗挺进了我的密道在线播放贝壳 | 久久re视频这里精品09首页 | www亚洲欲色成人久久精品 | 久久久无码精品亚洲欧美 | 中文字幕在线视频免费观看 | 蜜桃传媒在线观看入口 | 成人综合在线视频免费观看完整版 | 老湿司午夜爽爽影院榴莲视频 | 67194成网页发布在线观看 | 国产制服丝袜91在线 | 美女脱了内裤张开腿让男人桶到爽 | 日本精品久久无码影院 | 亚洲色视在线观看视频 | 久久久久久久久久久福利观看 | 亚洲中文字幕乱倫在线 | 色AV色婷婷66人妻久久久 | 黄A无码片内射无码视频 | 波多野结衣 无码片 | 天天槽任我槽免费 | 忘忧草研究所 麻豆 | 在线观看成人3d动漫入口 | 2021久久99国产熟女人妻 | 亚洲一区乱码电影在线 | 美女的让男人桶爽网站 | 亚洲综合日韩在线2019 | 玖玖爱这里只有精品视频 | 99亚洲精品 | 伊人精品影院一本到综合 | 欧美多人群p刺激交换电影 欧美多毛的大隂道 | 精品区2区3区4区产品乱码9 | 刮伦人妇A极一片 | gay台湾无套男同志xnxⅹ | 国产精品2020观看久久 | 最近中文字幕完整版免费高清 | 国产色播视频在线观看 | 欧美另类与牲交ZOZOZO | 伦理 电影在线观看百度影音 | 看 视频一一级毛片 |