win32汇编入门(一)
基礎(chǔ)結(jié)構(gòu)
.386.model flat,stdcalloption casemap:none<一些include語句>.stack [堆棧段的大小].data<一些初始化過的變量定義>.data?<一些沒有初始化過的變量定義>.const<一些常量定義>.code<代碼><開始標(biāo)號(hào)><其他語句>end 開始標(biāo)號(hào);這里是注釋 ?分行的辦法是在一行的最后用反斜杠(\)做換行符
變量定義初始值放.data 未初始值.data? ;定義在 .data?段中不會(huì)增大 .exe文件的大小
?
表3.2? 變量的類型
?
| 名??? 稱????????????????????????????? 表示方式? ?????????????縮??? 寫???????? 長(zhǎng)度(字節(jié)) | |||
| 字節(jié) | byte | db | 1 |
| 字 | word | dw | 2 |
| 雙字(doubleword) | dword | dd | 4 |
| 三字(farword) | fword | df | 6 |
| 四字(quadword) | qword | dq | 8 |
| 十字節(jié)BCD碼(tenbyte) | tbyte | dt | 10 |
| 有符號(hào)字節(jié)(signbyte) | sbyte | ? | 1 |
| 有符號(hào)字(signword) | sword | ? | 2 |
| 有符號(hào)雙字(signdword) | sdword | ? | 4 |
| 單精度浮點(diǎn)數(shù) | real4 | ? | 4 |
| 雙精度浮點(diǎn)數(shù) | real8 | ? | 8 |
| 10字節(jié)浮點(diǎn)數(shù) | real10 | ? | 10 |
?
?
szBuffer??????????? db????? 100 * 1024 dup (?)
szChar? db 'Hello, world;',0dh,0ah
?
1. 局部變量的定義
?
MASM用local偽指令提供了對(duì)局部變量的支持。定義的格式是:
?
local?????? 變量名1[[重復(fù)數(shù)量]][:類型],變量名2[[重復(fù)數(shù)量]][:類型]……
local????? loc1[1024]:byte??????? ;例1
local偽指令必須緊接在子程序定義的偽指令proc后、其他指令開始前,這是因?yàn)榫植孔兞康臄?shù)目必須在子程序開始的時(shí)候就確定下來
?
3. 獲取變量地址 ?
全局變量 ?mov???? 寄存器,offset 變量名
?
局部變量 ?lea???? eax,[ebp-4]
?
該指令可以在運(yùn)行時(shí)按照ebp的值實(shí)際計(jì)算出地址放到eax中。
?
如果要在invoke偽指令的參數(shù)中用到一個(gè)局部變量的地址,該怎么辦呢?參數(shù)中是不可能寫入lea指令的,用offset又是不對(duì)的。MASM對(duì)此有一個(gè)專用的偽操作符addr,其格式為:
?
addr 局部變量名和全局變量名
?
當(dāng)addr后跟全局變量名的時(shí)候,用法和offset是相同的;當(dāng)addr后面跟局部變量名的時(shí)候,編譯器會(huì)自動(dòng)用lea指令先把地址取到eax中,然后用eax來代替變量地址使用。注意addr偽操作符只能在invoke的參數(shù)中使用
?
?
?
調(diào)用API?
原型?MessageBox Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword
調(diào)用 invoke? MessageBox,NULL,offset szText,offset szCaption,MB_OK 或
?
push??? uType
?
push??? lpCaption
?
push??? lpText
?
push??? hWnd
?
call??? MessageBox
函數(shù)的聲明
函數(shù)名 proto [距離] [語言] [參數(shù)1]:數(shù)據(jù)類型,[參數(shù)2]:數(shù)據(jù)類型,...
例 參數(shù)名可省略
MessageBox? Proto? hWnd:dword,lpText:dword,lpCaption:dword,uType:dword
?
MessageBox? Proto? :dword,:dword,:dword,:dword
?
?
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/xuankuwa/p/3659320.html
總結(jié)
以上是生活随笔為你收集整理的win32汇编入门(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cuda-convnet在Ubuntu1
- 下一篇: 模拟真实环境之内网漫游