導航:首頁 > 文檔加密 > win32匯編pdf

win32匯編pdf

發布時間:2022-08-23 11:58:06

㈠ Win32的匯編語言手冊了從哪裡可以找到了

"hello,world!"win32匯編小程序szText db "Hello, world!",0

szCaption db "Win32Asm",0

.code
start:
push MB_OK
lea eax,szCaption
push eax
lea eax,szText
push eax
push NULL
call messageboxa
xor eax,eax
push eax
call exitprocess
end start
--------------------------------------------------

編譯鏈接:

分下面兩步進行:

ml /c /coff 3.asm

link /subsystem:windows /libpath:d:masm7lib 3.obj

第一步編譯生成3.obj文件

/c 表示只編譯,不鏈接

/coff 表示生成COFF格式的目標文件

第二步鏈接生成3.exe文件

/subsystem:windows 表示生成windows文件

/libpath:d:masm7lib 表示引入庫的路徑為:d:masm7lib。

在安裝Masm32後,引入庫位於Masm32Lib目錄下。

也可設置環境變數Lib的值:在dos提示符下鍵入Set Lib=d:masm7lib,這樣「鏈接」就可簡單寫成:

link /subsystem:windows 3.obj,試想一下,在程序調試過程中,修改源程序是常用的事啦,每次編譯鏈接都要帶/libpath:...那該有多煩人呢。當然,我們也可在源程序中直接給出引入庫的位置,這樣,鏈接時就方便啦,如下:

includelib d:masm7libkernel32.lib

includelib d:masm7libuser32.lib

--------------------------------------------------

執行:在dos提示符下鍵入3,回車,出現一個消息框,哈哈,真正的Win32程序!
--------------------------------------------------

深入分析:

看一下源程序,有這么兩行:call messageboxacall exitprocess。大家一看都知道,這是子程序調用,但是我們並沒寫這樣的子程序,事實上,這些是API函數。作為函數,我們在調用時可能需要傳送給函數一些參數,程序怎麼知道傳送的參數有哪些,類型是什麼呢?就是通過函數原型定義,如下所示:

ExitProcess PROTO :DWORD

MessageBoxA PROTO :DWORD,:DWORD,:DWORD,:DWORD

可以看出,ExitProcess有一個參數,MessageBoxA有四個參數,這些參數都是DWORD類型。

在Win32中,參數的傳遞都是通過堆棧來完成的。象MessageBoxA這個函數有四個參數,究竟是左邊的先壓入堆棧還是右邊的先入棧呢?.model flat,stdcall給出了答案。stdcall 指定參數是從右到左壓入堆棧的,且調整堆棧是在子程序返回時完成的。在源程序中不需要用「add sp,值」來保持堆棧平衡。對MessageBox,在API手冊中是這樣定義的:

int MessageBox(
HWND hWnd, // handle of owner window
LPCTSTR lpText, // address of text in message box
LPCTSTR lpCaption, // address of title of message box
UINT uType // style of message box
)
;所以會有我們的程序段: 看看上面的程序,不難想到,假如在寫程序時,少往堆棧里壓入一個數據,那將是一個致命的錯誤。能不能將這種檢查參數個數是否匹配的工作交給計算機來完成呢?這是可以的,INVOKE指令可以幫助我們完成這樣的工作。假如你的參數個數不正確,連接器將給出錯誤提示。所以,極力建議你使用invoke代替call來調用子程序,當然,這不是絕對的。使用invoke上面的指令就可簡寫成下面的樣子,看起來簡煉多啦,查錯也方便啦!

invoke messageboxa, NULL,addr szText,addr szCaption,MB_OK

另外,像NULL,MB_OK都是一些常量,這樣的常量有很多,還有很多的結構,如果在我們的程序中一開始都寫這么多的東西,可能一下子就把你嚇怕啦,也容易出錯,更不便於看程序的主要部分。hutch整理的windows.inc包含了WIN32編程所需要的常量和結構體的定義,我們可簡單的用一個include指令將這些常量和結構的定義插入到我們的文件中:

include d:masm32includewindows.inc

但是windows.inc中並不包含函數原型的聲明,還要從其他的頭文件中得到函數原型的聲明,比如:messageboxa的原型聲明在user32.inc文件中,exitprocess在kernel32.inc文件中。這些頭文件都放在 masm32include文件夾下。

還有,要用windows.inc,必須使用option casemap:none,它的意思是告訴 MASM 要區分符號的大小寫,譬如:start和START是不一樣的。否則,一個小小的程序,可能會出成百上千的錯誤呀!

其他的,就不再細說啦,到此,上面的程序可重新修改如下:

-----------------------------------------------------------------

;最終的結果;32位程序,要用flat啦!;stadcall,標准調用;數據區,定義2個字元串szText db "Hello, world!",0

szCaption db "Win32Asm",0

.code;代碼開始執行處 /I d:masm7include 表示*.inc文件的位置,也可設置環境變數Set include=d:masm7include來簡化操作,也可在程序中明確指出*.inc的位置。

前面講的都是用兩條指令來完成編譯鏈接,實際上用一條指令也可完成,如下:

ml /coff /I d:masm7include 3.asm /link /subsystem:windows /libpath:lib

若*.inc及引入庫在源程序中都明確指出其位置,則可簡化為:

ml /coff 3.asm /link /subsystem:windows

未完。
請去 這里查
http://tech.ddvip.com/program/masm/index.html

㈡ win32匯編問題

:00401007 0BDB or ebx,ebx ; ebx或操作自身
; .break .if ebx
:00401009 750C jne 00401017 ;或以後的判斷,這里是JNE,所以是判斷EBX
;是否為0。非0則跳轉到00401017(esi+=2)
;如果是0則不跳轉,執行下一條指令
…………
…………
:00401017 BE01000000 mov esi,00000002 ;EBX非0則跳轉到這里

這里or ebx,ebx需要設置什麼標志位,主要是看後面的跳轉是什麼。JNE是非0跳轉,所以OR操作是判斷EBX是否為0,為0則設置標志位ZF=1,非0則設置標志位ZF=0

㈢ 誰可以把win32下匯編第二版的清晰版pdf發給我謝謝

這類書 還是 拿到手裡看比較好

可以到處看

不然你只能在電腦前看

很苦悶的

我就是買了書看

去可以打折的書店

才賣50 不貴把

這么經典的書才50

㈣ Win32匯編高手請進

MOV DWORD PTR DS:[_osver],EAX ;保存eax中的內容
MOV EAX,DWORD PTR DS:[_osver]
AND EAX,0FF ;將eax的高16位清零,低16位不變
MOV DWORD PTR DS:[_winminor],EAX ;把eax中內容放到DS:[_winminor]指向的內存
AND ECX,0FF ;將ecx的高16位清零,低16位不變
MOV DWORD PTR DS:[_winmajor],ECX ; 把ecx中內容放到DS:[_winmajor]指向的內存
MOV EDX,DWORD PTR DS:[_winmajor] ;把DS:[_winmajor]內容放到edx(0-7位有效)
SHL EDX,8 ;將edx左移8位(變為8-15有效)
ADD EDX,DWORD PTR DS:[_winminor] ;把DS:[_winminor]內容放到edx(0-7位改變)
MOV DWORD PTR DS:[_winver],EDX ;edx存入DS:[_winver]指向的內存
MOV EAX,DWORD PTR DS:[_osver] ;取DS:[_osver](即原eax內容)到eax
SHR EAX,10 ;eax右移10位
AND EAX,0FFFF ;將eax的高16位清零,低16位不變
MOV DWORD PTR DS:[_osver],EAX ;把eax的內容存入DS:[_osver]指向的內存

代碼不全,看不出具體的作用。
但總體來看,一是將eax的低8位放到edx的8-15位,ecx的低8位放到edx的0-7位。二是將原eax的11-26位放到DS:[_osver]指向的內存單元(從低位放起)

㈤ 大家做WIN32匯編是怎麼編輯資源啊

VC當然可以,生成的.RES文件就是已經編譯好的,不需要再調用MASM32的RC,但是,需要使用cvtres將已經編譯的資源文件轉換成obj文件,以便與目標EXE進行鏈接。格式如下:cvtres /machine:ix86 filename.res 只有.RC文件才是沒有經過編譯的文本文件,必須先執行rc.exe 生成.RES文件,再用cvtres轉成obj文件。 工具軟體還有很多,Borland Resource Compiler(brcc32.exe),Resource Workshop,Resource Builder都可以用。一般都可以生成.RES文件,或者可以保存成未編譯的資源腳本*.RC文件。 說VC當然不行的那個,簡直就是誤人子弟!

㈥ win32匯編中的子窗口控制項ID定義問題。

沒有系統預定義的Id,都是程序中定義並使用的。
Res格式中記錄了定義好的Id,
程序調用Windows的API來載入/處理資源(用Hinstance來指定 hDlg)中指定Id的資源(控制項)
因為必須明確指定從哪個model中載入,而在一個Model中是不允許有同名的同種類資源的,所以Windows不會找不到正確的資源。

㈦ Win32匯編語言程序設計的電子書教程在哪兒下載啊

網路搜 Windows環境下32位匯編程序設計 羅雲斌

㈧ Win32 匯編,如何向指定文件寫入內容

要寫入的文件內容放到1.txt中,向2.txt中寫入1.txt的內容,代碼:
DATA SEGMENT
FILE1 DB '1.TXT',0
FILE2 DB '2.TXT',0
INBUF DB 256 DUP(?)
HANDLE1 DW ?
HANDLE2 DW ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AH,3DH
MOV AL,0
LEA DX,FILE1
INT 21H
MOV HANDLE1,AX
mov ah,3ch
mov cx,00
lea dx,FILE2
int 21h
mov HANDLE2,ax

black: MOV AH,3FH
MOV BX,HANDLE1
MOV CX,1
LEA DX,INBUF
INT 21H
cmp ax,0
je out1
mov ah,40h
mov bx,HANDLE2
mov cx,1
lea dx,INBUF
int 21h
jmp black
out1: MOV AH,4CH
INT 21H
CODE ENDS
END START

閱讀全文

與win32匯編pdf相關的資料

熱點內容
法國電影一個偷畫 瀏覽:879
店長的h命令必須服從 瀏覽:94
cad填充命令是什麼 瀏覽:870
java引用類型值類型 瀏覽:240
徐錦江葉子楣方唐鏡 瀏覽:59
可以在線看片的網站 瀏覽:133
小米加密兔手機壁紙 瀏覽:613
2019程序員筆記本 瀏覽:477
武大小孩子厲害的電影有哪些 瀏覽:35
找一個可以看的網址 瀏覽:79
四個字的國外電影,小孩兒 瀏覽:411
推薦看片網站 瀏覽:652
主角叫林飛的小說是什麼 瀏覽:683
閑置伺服器能幹什麼工作 瀏覽:949
asdr q-2299123 瀏覽:987
中國最大尺度古裝電影 瀏覽:695
電影和電視播放器 瀏覽:113
櫻桃小說by小花喵 瀏覽:514
英國看片網站叫什麼名字 瀏覽:676
法蘭克plc編程軟體 瀏覽:359