日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

win32汇编基础概念

發布時間:2023/12/18 编程问答 64 豆豆
生活随笔 收集整理的這篇文章主要介紹了 win32汇编基础概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、關于寄存器

寄存器有EAX,EBX,ECX,EDX,EDI,ESI,ESP,EBP等,似乎IP也是寄存器,但只有在CALL/RET在中會默認使用它,其它情況很少使用到,暫時可以不用理會。
EAX是WIN32 API 默認的返回值存放處。
ECX是LOOP指令自動減一的寄存器。
ESP是堆棧指針。
EBP經常用來在堆棧中尋址。
ESI好像常常用在指針尋址中,EDI不大清楚。

二、關于內存尋址

WIN32中內存是平坦的,對于每個程序來說都可以使用2G范圍的地址,但各個程序之間并不會干擾,這是因為各個程序所使用到的物理內存被Windows自行安排,不會互相覆蓋,而且一個程序不會隨意地訪問到另一個程序的地址空間。

三、關于堆棧

Windows為每個程序安排了堆棧段,它是從高地址向低地址延伸的,之所以采用這種方式,是因為這樣可以使堆棧指針始終指向最近入棧的元素的起始地址,這樣的話,為訪問這個元素提供了非常便利的方式。

ESP作為堆棧指針始終指向棧頂,如果看一下PUSH和POP的操作就可以明白這句話:
PUSH: ESP <-- ESP-4 (ESP+3,ESP) <-- 入棧元素
POP: 出棧元素 <-- (ESP+3,ESP) ESP <-- ESP+4

因為PUSH和POP自動修改了ESP的值,使它始終指向棧頂了。當然也可以自己來修改ESP的值,例如我們可以:
sub? esp,4? ;這樣就把棧頂指針向下移動了。
這種操作常常用在局部變量的分配中,在子程序中使用到局部變量時,就在堆棧中為它們提供空間,這樣可以使子程序退出時收回局部變量占用的空間,有利于子程序的模塊化。

我們可以用ESP來尋址堆棧中的元素,比如ESP指向當前棧頂元素的起始地址,ESP-4指向前一個元素的起始地址,不過因為ESP常常在變化,這樣用ESP在堆棧中尋址的話不方便,所以我們就用EBP來代替ESP尋址,首先把EBP入棧保存,然后把ESP賦值給EBP,這樣就可以用EBP來尋址堆棧中的數據了。我用一個例子來說明堆棧的變化。

push? 0x00000001???????????;1
push? ebp???????????????? ?;2
mov? ebp,esp????????????? ?;3
push? 0x12345678????????? ?;4
mov? eax,dword ptr[ebp+4]? ;5
mov? ebx,dword ptr[ebp-4]? ;6
mov? ax,word ptr[ebp-2]??? ;7
mov? al,byte ptr[ebp-1]??? ;8
mov? al,byte ptr[ebp-3]??? ;9
mov? ax,word ptr[ebp-3]??? ;10

?

5 eax=0x00000001
6 ebx=0x12345678
7 ax=0x1234
8 al=0x12
9 al=0x56
10 ax=0x3456


堆棧使用在子程序的實現中,當調用子程序時,首先把參數入棧,然后把返回IP入棧,然后轉移到子程序處,如果有局部變量,則下移ESP,然后初始化該局部變量,這樣用到EBP來尋址局部變量,參數的尋址同樣要用到EBP。


四、簡單的幾個關鍵字

ptr? 顯式指定后面的數據的類型
offset 全局變量的地址
addr? 局部變量的地址,也可以用在全局變量上
local? 定義局部變量
proc? 定義子程序
proto? 聲明子程序

五、例子

Hello.asm文件的內容如下: ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 第一部分:模式和源程序格式的定義語句 ????????????? .386????????????????????????????;?指令集 ????????????? .model flat,stdcall?????????????;?工作模式 ????????????? option casemap:none???????????? ;?格式 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Include 文件定義 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> include?????????? windows.inc include?????????? user32.inc includelib??????? user32.lib include?????????? kernel32.inc includelib??????? kernel32.lib ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 數據段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ????????????? .data szCaption?????? db??? 'A MessageBox !',0 szText??????????db??? 'Hello, World !',0 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; 代碼段 ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ????????????? .code start: ????????????? invoke???? MessageBox,NULL,offset szText,offset szCaption,MB_OK ????????????? invoke???? ExitProcess,NULL ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ????????????? end?start??????? ;?指定程序的入口 ? 1.?????????第一部分模式和源程序格式的定義語句 第一行 指定使用的指令集(編譯器使用) Win32環境工作在80386及以上的處理器中,所以必須定義.386。如果程序(VxD等驅動程序)中要用到特權指令,那么必須定義.386p。 第二行 定義程序工作的模式(包括內存模式、語言模式、其它模式) 對Win32程序來說,只有一種內存模式,即flat(平坦)模式。 Win32 API調用使用的是stdcall格式,所以Win32匯編中必須在.model中加上stdcall參數。 第三行 option語句 ???????由于Win32 API中的API名稱區分大小寫,所以必須定義option casemap:none,來表明程序中的變量和子程序名對大小寫敏感。 ? 2.?????????包含全部段的源程序結構: .386 .model flat,stdcall option casemap:none <一些include語句> .stack [堆棧段的大小] .data <一些初始化過的變量定義> .data? <一些沒有初始化過的變量定義> .const <一些常量定義> .code <代碼> <開始標記> <其他語句> end 開始標記 ? 3.?????????段的定義 數據段 ?????? .data ??????????????已初始化數據段,可讀可寫的已定義變量; 當程序裝入完成時,這些值就已經在內存中; ??????????????數據定義在.data段中會增加可執行文件的大小; ????????????? .data段一般存放在可執行文件的_DATA節區(Section)內; ?????? .data? ??????????????未初始化數據段,可讀可寫的未定義變量,在可執行文件中不占空間; ??????????????這些變量一般作為緩沖區或者在程序執行后才開始使用。 ??????????????數據定義在.data?數據段中不會增加可執行文件的大小; ????????????? .data?段一般存放在可執行文件的_BSS節區內; ?????? .const ??????????????常量,可讀不可寫的變量; ? 代碼段 ?????? .code ??????????????所有的指令都必須寫在代碼段中; ????????????? Win32中,數據段是不可執行的,只有代碼段有可執行的屬性; ??????????????對于運行在特權級3的應用程序,.code段不可寫。除非把可執行文件PE頭部中的屬性位改成可寫; ??????????????對于運行在特權級0的程序,所有的段都有讀寫權限,包括代碼段; ????????????? .code代碼段一般存放在可執行文件的_TEXT節區內; ? 堆棧段 ?????? .stack ??????????????與DOS匯編不同,Win32匯編不必考慮堆棧。系統會自動分配堆棧空間; ??????????????堆棧段的內存屬性是可讀寫并且可執行; ??????????????靠動態修改代碼的反跟蹤模塊可以拷貝到堆棧中去邊修改邊執行; ??????????????緩沖區溢出技術也會用到這個特性; ? 4.?????????調用操作系統功能的方法: DOS下 操作系統的功能通過各種軟中斷來實現。 ???????應用程序調用操作系統功能將經歷如下三個過程: ??????????????把相應的參數放在各個寄存器中再調用相應的中斷; ??????????????程序控制權轉到中斷中去執行; ??????????????完成以后通過iret中斷返回指令回到應用程序中; ?????? DOS下調用系統功能方法的缺點: ??????????????所有的功能號定義是難以記憶的數字; ????????????? 80x86系列處理器能處理的中斷最多只能有256個; ??????????????通過寄存器來傳遞參數,對于參數較多的函數很不方便; Win32下 ???????系統功能模塊放在Windows的動態鏈接庫(DLL)中 ???????作為Win32 API核心的3個DLL: ????????????? KERNEL32.DLL????系統服務功能。 ????????????? GDI32.DLL???????????圖形設備接口。 ????????????? USER32.DLL?????????用戶接口服務。 ? 常用API的參數和函數聲明,查看文檔《Microsoft Win32 Programmer's Reference》 ? 5.?????????Win32 API的函數原型聲明 函數原型聲明的匯編格式如下: 函數名 proto [距離] [語言] [參數1]:數據類型, [參數2]:數據類型,...... proto是函數聲明的偽指令 距離可以設置為NEAR、FAR、NEAR16、NEAR32、FAR16或FAR32,由于Win32中只有一個平坦的段,無所謂距離,所以在定義時可以忽略距離。 語言類型可是使用.model所定義的默認值。 ? 以消息對話框函數MessageBox為例 C格式如下: int MessageBox( ?????? HWND hWnd,????????????? // Handle to owner window ?????? LPCTSTR lpText,???????? // text in message box ?????? LPCTSTR lpCaption,???? // message box title ?????? UINT uType???????????????? // message box style ?????? ); ? 匯編格式如下: MessageBox Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword 或者寫為 MessageBox Proto :dword,:dword,:dword,:dword 編譯器只對參數的數量和類型感興趣,參數的名稱只是增加可讀性,所以可以省略。 對于匯編語言來說,Win32環境中的參數實際上只有一種類型,就是一個32位的整數(dword,double word),雙字,四字節。 ? ? 6.?????????調用Win32 API 調用API有如下兩種方法: 1)????????invoke invoke是MASM提供的偽指令; ????????????? invoke偽指令的好處就是能夠提高代碼的可讀性,減少錯誤; ????????????? invoke做了下面三件事: ?????????????????????在編譯的時候,由編譯器把invoke偽指令展開成相應的push指令和call指令; ?????????????????????進行參數數量的檢查工作; ?????????????????????如果帶的參數數量和聲明時的數量不符,編譯器會報錯; 2)????????push和call的組合 80386處理器的指令 ? invoke???? MessageBox,NULL,offset szText,offset szCaption,MB_OK 也可寫為 push NULL push offset szText push offset szCaption push MB_OK call MessageBox ? 7.?????????Win32 API函數返回值的處理方法 對于匯編語言來說,Win32 API函數返回值的類型只有dword一種類型,它永遠放在eax中。 如果要返回的內容在一個eax中放不下,Win32 API采用如下方法來解決: a)?????????一般是eax中返回一個指向返回數據的指針; b)????????在調用參數中提供一個緩沖區地址,數據直接返回到這個緩沖區中去。類似變參的概念; ? 8.?????????與字符串相關Win32 API的分類 在Win32環境中,根據兩個不同的字符集(ANSI字符集和Unicode字符集),可以把和字符串相關的API分成兩類: a)?????????處理ANSI字符集的Win32 API函數 函數名稱的尾部帶一個“A”字符; ANSI字符串是以NULL結尾的一串字符數組,每一個ANSI字符占一個字節的寬度; 例如:MessageBoxA Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword b)????????處理Unicode字符集的Win32 API函數 函數名稱的尾部帶一個“W”字符; ??????????????每一個Unicode字符占兩個字節的寬度,所以可以同時定義65536個不同的字符; ??????????????例如:MessageBoxW Proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dword ? Windows 9x系列不支持Unicode版本的API,絕大多數的API只有ANSI版本。 只有Windows NT系列才完全支持Unicode版本的API。 為了編寫在幾個平臺中都能通用的程序,一般應用程序都使用ANSI版本的API函數集。 ? 提高程序可移植性的一個方法: 一般在源程序中不直接指明使用Unicode還是ANSI版本,而是使用宏匯編中的條件匯編功能來統一替換。 比如,在頭文件中做如下定義: if UNICODE ?????? MessageBox equ <MessageBoxW> else ?????? MessageBox equ <MessageBoxA> endif 然后在源程序的頭部指定UNICODE=1或UNICODE=0,重新編譯后就能產生不同的版本。 ? 9.?????????include語句 include語句的語法是: include 文件名 include <文件名> 用“<>”將文件名括起來,可以避免黨文件名和MASM的關鍵字同名時引起編譯器混淆。 ? include語句的作用: 解決了所用到的Win32 API函數都必須預先聲明的麻煩。 把所有用到的Win32 API函數聲明預先放在一個頭文件中,然后用include語句包含進源程序。 ? 編譯器對include語句的處理方法,僅是簡單地用指定的文件內容把這行include語句替換掉而已。 ? 和C語言中的#include作用類似。 ? 10.?????includelib語句 includelib語句的語法是: includelib 庫文件名 includelib <庫文件名> 用“<>”將文件名括起來,同樣可以避免當文件名和MASM的關鍵字同名時引發編譯器混淆。 ? includelib語句的作用是: 告訴鏈接器使用哪些導入庫。 ? 導入庫 WIN32中,API函數的實現代碼放在DLL中,導入庫中只留有API函數的定位信息和參數數目等簡單信息。 ? DOS下的函數庫是靜態庫 C語言的函數庫是典型的靜態庫 靜態庫的好處是節省大量的開發時間。 靜態庫的缺點是每個可執行文件中都包含了要用到的相同函數的代碼,即占用了大量的磁盤空間,執行的時候,這些代碼也會重復占用內存。 ? includelib語句和include語句的處理不同,includelib不會把.lib文件的內容插入到源程序中,它只是告訴鏈接器在鏈接的時候到指定的庫文件中去找Win32 API函數的位置信息而已。 ? ? 11.?????MASM中標號和變量的命名規范 MASM中標號和變量的命名規范是相同的,如下: 1)????????可以用字母、數字、下劃線及符號@、$和?。 2)????????第一個符號不能是數字。 3)????????長度不能超過240個字符。 4)????????不能使用指令名等關鍵字。 5)????????在作用域內必須是唯一的。 ? 12.?????標號 標號有如下兩種定義方法: 標號名:??目的指令?????? ;方法1 標號名::?目的指令?????? ;方法2 方法1和方法2是不同的 方法1 標號名的后面跟一個冒號,表示標號的作用域是當前的子程序。 在單個子程序中的標號不能同名,不能從一個子程序中用跳轉指令跳到另一個子程序中。 方法2 標號名的后面跟兩個冒號,表示標號的作用域是整個程序。 對任何其它子程序都是可見的。 ? 在低版本MASM中,默認標號的作用域是整個程序。 在高版本MASM中,默認標號的作用域是當前的子程序。 ? 高版本MASM中的@@標號 當用@@做標號時,可以用@F和@B來引用; @F表示本條指令后的第一個@@標號; @B表示本條指令前的第一個@@標號; ? 不要在間隔太遠的代碼中使用@@標號,源程序中@@標號和跳轉指令之間的距離最好限制在編輯器能夠顯示的同一屏幕的范圍內。 ? 13.?????全局變量 全局變量的作用域是整個程序 Win32匯編的全部變量定義在.data或.data?段內,這兩個段都是可寫的??梢酝瑫r定義變量的類型和長度。 ? 全局變量的定義格式如下: 變量名????類型???????初始值1,初始值2,...... 變量名????類型???????重復數量 dup (初始值1,初始值2,......) ? MASM支持的變量類型如下表:

名稱 表示方式 縮寫 長度(字節)
字節 Byte db 1
word dw 2
雙字(double word) dword dd 4
三字(far word) fword df 6
四字(quad word) qword dq 8
10字節BCD碼(ten byte) tbyte dt 10
有符號字節(sign byte) sbyte ? 1
有符號字(sign word) sword ? 2
有符號雙字(sign dword) sdword ? 4
單精度浮點數 Real4 ? 4
雙精度浮點數 Real8 ? 8
10字節浮點數 Real10 ? 10

注意:只有定義全局變量的時候,類型才可以用縮寫。 ? 在byte類型變量的定義中,可以用引號定義字符串和數值定義的方法混用。 例如:szText??????? db?????????? ‘Hello,world!’,0dh,0ah,’Hello again’,0dh,0ah,0 ? 全局變量的初始化: 全局變量在定義中既可以指定初值,也可以只用問號預留空間。 全局變量定義在.data?段中時,只能用問號預留空間,因為.data?段不能指定初始值。 定義時用問號指定的全局變量的初始值是0。 ? 14.?????局部變量 局部變量的好處是使程序的模塊結構更加分明。 局部變量的缺點是因為空間是臨時分配的,所以無法定義含有初始化值的變量,對局部變量的初始化一般在子程序中由指令完成。 局部變量的作用域是單個子程序。 局部變量定義在堆棧中。 ? 局部變量的定義格式如下: local???????變量名1[[重復數量]][:類型],變量名2[[重復數量]][:類型] ...... local是MASM提供的偽指令,用于支持局部變量的定義。有了local偽指令降低不少難度。 ? 定義局部變量需注意以下幾點: a)?????????local偽指令必須緊接在子程序定義的偽指令proc后、其它指令開始之前,因為局部變量的數目必須在子程序開始的時候就確定下來; b)????????定義局部變量時數據類型不能用縮寫。如果要定義數據結構,可以用數據結構的名稱當作類型; c)????????Win32匯編中,參數的默認類型是dword,如果定義dword類型的局部變量,類型可以省略; d)????????當定義數組類型的局部變量時,重復數量可以用“[]”括起來,不能使用定義全局變量的dup偽指令。 e)?????????局部變量不能和已定義的全局變量同名。 f)?????????局部變量的作用域是當前的子程序,所以在不同的子程序中可以有同名的局部變量。 ? 局部變量的初始化: 局部變量無法在定義的時候指定初始化值,因為local偽指令只是為局部變量留出空間。 局部變量的初始值是隨機的,所以,對局部變量的值一定要初始化。 一般在子程序中使用指令來初始化局部變量。 ? RtlZeroMemory這個Win32 API函數實現將整個數據結構填0的功能,類似C語言的memset。 ? 在原來的DOS環境下,低版本的MASM中,所有的變量都相當于現在所說的全局變量,都定義在數據段里面。 用匯編語言在堆棧中定義局部變量非常麻煩,需要作一張表,表上的內容是局部變量名和 ebp指針的位置關系。 ? 15.?????使用局部變量的一個典型例子與反匯編得到指令的比較: TestProc??????? proc ???????????????????? local ????? @loc1:dword,@loc2:word ???????????????????? local ????? @loc3:byte ? ???????????????????? mov ????? eax,@loc1 ???????????????????? mov ????? ax,@loc2 ???????????????????? mov ????? al,@loc3 ? TestProc??????? endp ? 反編譯后得到以下指令: :00401000 55???????????push ebp :00401001 8BEC?????????mov ebp,esp :00401003 83C4F8???????add esp,FFFFFFF8 :00401006 8B45FC???????mov eax,dword ptr [ebp-04] :00401009 668B45FA???? mov ax,word ptr [ebp-06] :0040100D 8A45F9?????? mov al,byte ptr [ebp-07] :00401010 C9???????????leave :00401011 C3???????????ret ? 其中的 push ebp????????????????;?把原來ebp寄存器的值保存起來; mov ebp,esp?????????????;?把esp寄存器的值復制到ebp寄存器中,供存取局部變量時做指針用; add esp,FFFFFFF8??????? ;?在堆棧中預留出空間(即重新設置堆棧指針),由于堆棧是向下增長,所以要把esp加上一個負值。 三條指令用于局部變量的準備工作。 ? 在堆棧中預留出空間時,把esp加上(-8),而不是加上(-7),是因為在80386處理器中,以dword為界對齊時存取內存的速度最快。以空間換時間。 ? leave是80386指令集中的一條指令,用于局部變量的掃尾工作。 一條leave指令就實現了mov esp,ebp和pop ebp兩條指令的功能。 mov esp,ebp?? ; ebp寄存器中保存了正確的初始esp值,所以把正確的esp設置回去后,ret指令就能從堆棧中取出正確的地址返回。 pop ebp????????? ;?執行這條語句之后,堆棧就是正確的。 ? 由于esp寄存器在程序的執行過程中可能隨時會被用到,所以不可能用esp寄存器做指針來存取堆棧中的局部變量。 ebp寄存器也是以堆棧段為默認數據段的,所以可以用ebp做指針來存取堆棧中的局部變量。 ? 局部變量在堆棧中排列的順序如下表:

ebp偏移 內容
ebp+4 由call指令推入的返回地址。
ebp push ebp指令推入的原ebp值,然后新的ebp就等于當前的esp寄存器的值。
ebp-4 第一個局部變量@loc1:dword (4個字節)
ebp-6 第二個局部變量@loc2:word (2個字節)
ebp-7 第三個局部變量@loc3:byte (1個字節)

? ? 使用局部變量時的注意點: a)?????????ebp寄存器是關鍵,它起到保存原始esp寄存器值的作用; b)????????另外,ebp寄存器隨時用做存取局部變量的指針基址,所以絕不能把ebp寄存器用于別的用途; c)????????ebp寄存器的值絕對不能被改變,把ebp寄存器的值改掉,程序就玩完; ? ? 16.?????數據結構 數據結構相當于一種自定義的數據類型,類似C語言中的struct定義。 匯編中,數據結構的定義方法如下: 結構名??? struct 字段1?????類型??????? 字段2?????類型??????? ...... 結構名??? ends ? 定義數據結構并不會在某個段中產生數據,只有使用數據結構在數據段中定義數據后,才會產生數據。 ? 使用數據結構在數據段中定義數據的兩種方法如下: 第一種定義方法是未初始化的定義方法: ???????????????????? .data? stWndClass??? WNDCLASS???????? <> ...... ? 第二種定義方法是定義的同時指定結構中個字段的初始值: ???????????????????? .data stWndClass??? WNDCLASS???????? <1,1,1,1,1,1,1,1,1,1> ...... ? ? 匯編中,對數據結構變量的幾種引用方法如下: a)?????????最直接的方法: ?????? ?????? mov eax,stWndClass.lpfnWndProc ?????? ???????如果stWndClass結構變量在內存中的起始地址是403000h,那么這句指令會被編譯成mov eax,[403004h] b)????????在實際使用中,常有使用指針存取數據結構變量的情況: ?????? ???????如果使用esi寄存器做指針尋址 ?????? ?????? mov esi,offset stWndClass ?????? ?????? mov eax,[esi + WNDCLASS.lpfnWndProc] ??????????????第二句指令將被編譯成mov eax,[esi+4] c)????????使用assume偽指令把寄存器預先定義為結構指針,在進行操作: ????????????? mov ????? esi,offset stWndClass ????????????? assume ?esi:ptr WNDCLASS ????????????? mov??????? eax,[esi].lpfnWndClass ????????????? ...... ????????????? assume ?esi:nothing ??????????????編譯后產生同樣的代碼,不過程序的可讀性比較好。 ??????????????注意:在不使用esi寄存器做指針的時候要用assume esi:nothing取消定義。 ? 結構的嵌套定義如下: NEW_WNDCLASS????? struct dwOption???????????????????? dword??????????? ? oldWndClass???????????????? WNDCLASS?<> NEW_WNDCLASS?????? ends ? 引用嵌套的oldWndClass結構變量的lpfnWndProc字段的方法: assume ?esi:ptr NEW_WNDCLASS mov?????? eax,[esi].oldWndClass.lpfnWndProc ...... assume ?esi:nothing ? windows.inc文件定義了大部分Win32 API所涉及的常量和數據結構。 ? 17.?????以不同的類型訪問變量 MASM中以不同的類型訪問不會對變量造成影響。而C語言中的數據類型強制轉換過程中,數據的內容已經發生變化。 MASM中,如果要用指定類型之外的長度訪問變量,必須顯式地指出要訪問的長度,這樣,編譯器忽略語法上的長度校驗,僅使用變量的地址。 訪問變量是顯式地指出要訪問長度的方法是: 類型?????? ptr???變量名 例如: mov?????? ax,word ptr szBuffer mov?????? eax,dword ptr szBuffer 類型可以設置為byte、word、dword、fword、qword、real8和real10。 類型必須和操作的寄存器長度匹配,否則無法通過編譯。 ? 需要注意的是: 指定類型的訪問變量并不會去檢測長度是否溢出。 ? 80386的字節序是: 低位數據在低地址,高位數據在高地址 舉例: 下面這段代碼存在長度溢出的問題。長度溢出即越界存取到相鄰的其它變量。 ????????????? .data bTest1??db??????????12h wTest2??dw????????? 1234h dwTest3?dd??????????12345678h ????????????? ...... ????????????? .code ????????????? ...... ??????????????mov???????al,bTest1 ????????????? mov???????ax,word ptr bTest1 ??????????????mov?????? eax,dword ptr bTest1 ????????????? ...... 通過反匯編后的內容如下: ; .data段中的變量 :00403000 12??????????????? ;?從這里開始的1個字節是變量bTest1 :00403001 34??????????????? ;?從這里開始的2個字節是變量wTest2 :00403002 12 :00403003 78??????????????? ;?從這里開始的4個字節是變量dwTest3 :00403004 56 :00403005 34 :00403006 12 ? ; .code段中的代碼 :00401000 A000304000???????mov al,byte ptr [00403000] :00401005 66A100304000???? mov ax,word ptr [00403000] :0040100B A100304000???????mov eax,dword ptr [00403000] ? 運行結果: al等于12h ax等于 3412h eax 等于 78123412h ? 從例子可以看出,匯編中用ptr強制覆蓋變量長度的時候,實質上只用了變量的地址,編譯器并不會考慮定界的問題。 ? movzx指令用于數據長度的擴展 movzx指令是80386處理器提供的擴展指令,該指令總是將擴展的數據位用0代替。 movzx指令是安全的強制類型轉換方式。 能夠像C語言的強制類型轉換一樣,把一個字節擴展到一個字或一個雙字再放到ax或eax中,高位保持0而不是越界存取到其它的變量中。 ? movsx指令可以完成帶符號位的擴展 movsx指令是80386處理器提供的擴展指令; 當被擴展數據的最高位為0時,效果和movzx指令相同;當最高位為1時,則擴展部分的數據位全部用1填充。 ? 18.?????變量的尺寸和數量 sizeof偽操作符可以取得變量、數據類型或數據結構以字節為單位的長度(尺寸)。 格式: sizeof?????變量、數據類型或數據結構名 ? lengthof偽操作符可以取得變量、數據類型或數據結構中數據的項數(數量) 格式: length??????變量、數據類型或數據結構名 ? 對字符串使用sizeof偽操作符,取得的長度包括結束符0。 ? 需要注意的是: sizeof偽操作符和length偽操作符取得的數值是編譯期產生的,由編譯器直接替換到指令中去。所以,在反匯編得到的代碼中沒有sizeof或lengthof,而只有它們取得的數值。 ? 取得字符串長度的一種特殊情況: 如果szHello的定義分成兩行: szHello ?db??? ‘Hello’,0dh,0ah ????????????? db??? ‘World’,0 sizeof szHello得到的數值是7而不是13。 這種定義方式實質為越界使用字符串變量。 MASM中的變量定義只認一行,后一行db ‘World’,0實際上是另一個沒有名稱的數據定義。 要取得這種字符串的長度時,千萬不能用sizeof偽指令,最好是在程序中用lstrlen函數去計算。 ? 19.?????獲取變量地址 獲取全局變量地址和獲取局部變量地址的操作是不同的。 因為全局變量定義在數據段中,而局部變量在堆棧中。全局變量的地址可以在編譯期確定,而局部變量的地址只能在運行期確定。 ? 全局變量的地址在編譯期已經由編譯器確定了。 獲取全局變量的地址使用offset偽操作符,這個操作在編譯期而不是運行期完成。 mov???????寄存器,offset 變量名 ? 不可能用offset偽操作符來獲取局部變量地址的原因是: 局部變量是用ebp來做指針訪問的,由于ebp的值隨著程序的執行環境不同可能是不同的,所以局部變量的地址值在編譯期也是不確定的。 ? 獲取局部變量的地址使用lea指令 lea指令是80386處理器指令集中的一條指令。 lea ?eax,[ebp-4] ? 在invoke偽指令的參數中用到某個局部變量的地址,使用MASM提供的偽操作符addr。 格式為: addr????????局部變量名和全局變量名 addr偽操作符即可用于局部變量,也可用于全局變量 ? 使用addr偽操作符需要注意以下幾點: a)?????????對局部變量取地址的時候,addr偽操作符只能用在invoke的參數中,不能用在如下的mov指令中。 mov eax,addr 局部變量名???????????;這是錯誤的用法 因為在這句mov指令中,編譯器無法把addr偽操作符替換成lea指令。 b)????????當在invoke中使用addr偽操作符時,在addr偽操作符的左邊不能使用eax寄存器,否則eax寄存器的值會被覆蓋掉,當然eax寄存器用在addr偽操作符的右邊的參數中是可以的。 MASM對于這種情況會報編譯期錯誤。 ? ? 20.?????使用子程序 Win32匯編中的子程序也采用堆棧來傳遞參數,所以可以用invoke偽指令來調用子程序,并進行語法檢查工作。 ? 子程序的定義方式如下: 子程序名?????? proc???[距離] [語言類型] [可視區域] [USES 寄存器列表] [,參數:類型]...[VARARG] ???????????????????? local??局部變量列表 ???????????????????? ?????????????????????指令 ? 子程序名????? endp proc偽指令和endp偽指令用于定義子程序開始和結束的位置。 子程序有如下屬性: a)?????????距離??????????Win32中只有一個平坦的段,無所謂距離,所以對距離的定義往往忽略。 b)????????語言類型???????表示參數的使用方式和堆棧平衡的方式,如果忽略,則使用程序頭部.model定義的值。 c)????????可視區域???????可以設為PRIVATE、PUBLIC和EXPORT,默認是PUBLIC。 ??????????????????????PRIVATE表示子程序只對本模塊可見; ??????????????????????PUBLIC表示子程序對所有模塊可見(在最后編譯鏈接完成的可執行文件中); ??????????????????????EXPORT表示子程序是DLL的導出函數; d)????????USES寄存器列表?表示由編譯器在子程序指令開始前自動安排push這些寄存器的指令,并且在ret前自動安排pop指令,用于保護執行環境。 ????一種更方便的做法是,在子程序的開頭和結尾用pushad指令和popad指令一次保存和恢復所有寄存器。 e)?????????參數和類型????參數指參數的名稱,在定義參數名的時候不能跟全局變量和子程序中的局部變量重名。 ????對于類型,由于Win32中的參數類型只有32位(dword)一種類型,所以可以省略。在參數定義的最后還可以跟VARARG,表示在已確定的參數后還可以跟多個數量不確定的參數。 ? 在寫源程序的時候有意識地把子程序的位置提到invoke語句的前面,省略掉proto語句,可以簡化程序和避免出錯。 ? 參數傳遞和堆棧平衡 在調用子程序時,參數的傳遞是通過堆棧進行的。 調用者把傳遞給子程序的參數壓入堆棧,子程序從堆棧中取出相應的值來使用。 ? 調用約定,約定了參數入棧的順序和由誰(調用者或子程序)來平衡堆棧。 由于各種語言默認的調用約定是不同的,所以在proc以及proto語句的語言屬性中確定語言類型后,編譯器才能將invoke為指令翻譯成正確的樣子。 ? 不同語言調用方式的差別如下表:

語言類型 最先入棧參數 平衡堆棧者 允許使用VARARG
C 調用者
SysCall 子程序
StdCall 子程序
BASIC 子程序
FORTRAN 子程序
PASCAL 子程序


注:VARARG表示參數的個數可以是不確定的,如wsprinitf,StdCall的堆棧清除平時是由子程序完成的,但使用VARARG時是由調用者清除的。 從上表可以看出只有C語言是調用者平衡堆棧,其他語言類型都是被調用者來平衡堆棧。 ? 因為Win32約定的類型是StdCall,所以在程序中調用子程序或系統API后,不必自己來平衡堆棧,免去了很多麻煩。 存取參數和局部變量都是通過堆棧來實現的,和存取局部變量類似,參數的存取也是通過ebp做指針來完成的。 所有對局部變量使用的限制幾乎都可以適用于參數。 ? 21.?????條件測試語句 MASM的條件測試的語法和C語言相同。 同樣,對于不含比較符的單個變量或寄存器,MASM也是將所有非零值認為是“真”,零值認為是“假”。 與C語言的條件測試相同,MASM的條件測試偽操作符并不會改變被測試的變量或寄存器的值。 MASM的條件測試偽操作符經過編譯器編譯會翻譯成類似cmp或test之類的比較或位測試的指令。 ? MASM條件測試的基本表達式如下: 寄存器或變量???????操作符????操作數 兩個以上的表達式可以用邏輯運算符連接: (表達式1)邏輯運算符(表達式2)邏輯運算符(表達式3)... ? 條件測試中的操作符和邏輯運算符如下表

操作符和邏輯運算符 操作 用途
== 等于 變量和操作數之間的比較
!= 不等于 變量和操作數之間的比較
>? 大于 變量和操作數之間的比較
>= 大于等于 變量和操作數之間的比較
<? 小于 變量和操作數之間的比較
<= 小于等于 變量和操作數之間的比較
& 位測試 將變量和操作數做“與”操作
! 邏輯取反 對變量取反或對表達式的結果取反
&& 邏輯與 對兩個表達式的結果進行邏輯“與”操作
|| 邏輯或 對兩個表達式的結果進行邏輯“或”操作

? MASM的條件測試語句有如下幾點限制: a)?????????表達式的左邊只能是變量或寄存器,不能為常數; b)????????表達式的兩邊不能同時為變量,但可以同時為寄存器; 這些限制來自于80x86的指令。 ? 以下一些系統標志寄存器中的各種標志位的狀態指示,本身相當于一個表達式: CARRY?????????????????表示Carry位是否置位 OVERFLOW??????????????表示Overflow位是否置位 PARITY????????????????表示Parity位是否置位 SIGN??????????????????表示Sign位是否置位 ZERO??????????????????表示Zero位是否置位 ? 22.?????分支語句 MASM中的分支偽指令的語法如下: .if 條件表達式1 ???????表達式1為“真”時執行的指令 [.elseif 條件表達式2] ???????表達式2為“真”時執行的指令 [.elseif 條件表達式3] ???????表達式3為“真”時執行的指令 ... [.else] ???????所有表達式為“否”時執行的指令 .endif ? 注意: 關鍵字if/elseif/else/endif的前面有個小數點,如果不加小數點,就變成宏匯編中的條件匯編偽操作。功能完全不一樣。 if/else/endif是宏匯編中條件匯編宏操作的偽操作指令,作用是根據條件決定在最后的可執行文件中包不包括某一段代碼。 ? 由.if/.elseif/.else/.endif條件分支偽指令構成的分支結構只能有一個條件被滿足。 如果需要構成的分支結構對于所有的表達式為“真”都要執行相應的代碼,可以利用多個.if/endif來完成,如下: .if????表達式1 ???????表達式1為“真”要執行的指令 .endif .if????表達式2 ???????表達式2為“真”要執行的指令 .endif ? 23.?????循環語句 循環語句的語法如下: .while 條件測試表達式 ???????指令 ?????? [.break[.if?退出條件]]????????? ;如果.break偽指令后面跟一個.if測試偽指令的話,那么當退出條件為“真”時才執行.break偽指令。 ?????? [.continue] .endw .repeat ???????指令 ?????? [.break[.if?退出條件]]????????? ;如果.break偽指令后面跟一個.if測試偽指令的話,那么當退出條件為“真”時才執行.break偽指令。 ?????? [.continue] .until 條件測試表達式(或.untilcxz [條件測試表達式]) ? 其中,.while/.break/.continue/.endw/.repeat/.until/.untilcxz都是偽指令。 ? 循環體中可以使用.break偽指令強制退出循環。 循環體中可以使用.continue偽指令忽略以后的指令。 ? .while/.endw和.repeat/.until的區別如下: a)?????????前者可能一次也不會執行循環體內的指令,而后者至少會執行一次循環體內的指令。 b)????????前者當判斷條件為FALSE時退出循環,而后者當判斷條件為TRUE時退出循環。 ? MASM的條件測試總是把操作數當作無符號數看待。 這就是說,在分支和循環的偽指令反匯編后可以發現,在使用>,>=,<和<=比較符時,MASM的偽指令總是將比較以后的跳轉指令使用為jb和jnb等無符號數比較跳轉的指令。 所以,如果程序中需要構造有符號數的比較分支或循環結構,那么必須另外用jl和jg等有符號數比較跳轉的指令來完成,使用條件測試配合分支或循環偽指令可能會得到錯誤的結果。

總結

以上是生活随笔為你收集整理的win32汇编基础概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

深夜激情影院 | 福利视频第一页 | 一区二区三区四区五区在线 | 中文字幕在线一二 | 很污的网站 | 国产精品免费在线观看视频 | 最新影院 | 欧美精品一区在线 | 成人午夜影视 | 国产精品免费看 | avv天堂| 黄色小说视频网站 | 国产精品专区一 | 国产成人免费在线 | 视频一区二区在线 | 午夜av免费 | 97色资源 | 欧美性另类 | 在线国产日本 | 国产成人精品亚洲 | 国产精品va最新国产精品视频 | zzijzzij亚洲日本少妇熟睡 | 女人18毛片90分钟 | 亚洲日本三级 | 五月天电影免费在线观看一区 | 国产午夜精品视频 | 摸bbb搡bbb搡bbbb | 天天操天天操天天干 | 成人a v视频 | 中文字幕精品一区 | 日韩黄色在线电影 | 日韩免费在线观看 | 日韩精品不卡在线观看 | 久久国产综合视频 | 91在线国产观看 | 日韩中文字幕免费视频 | 日韩av中文字幕在线免费观看 | 久久久综合色 | 一区二区三区在线影院 | 在线免费91| 国产美女视频一区 | av在线免费在线观看 | 亚洲动漫在线观看 | 91av视频观看 | 色资源二区在线视频 | 伊色综合久久之综合久久 | 色婷婷av在线 | 在线观看黄色国产 | 国产黄色视 | 久久精品高清视频 | 狠狠色丁香婷婷综合久久片 | 久草免费在线观看 | 亚洲精品资源 | 青青河边草免费直播 | 国内精品小视频 | 97色在线观看免费视频 | 精品99久久 | 中文字幕在线播放一区 | 国产大尺度视频 | 一级免费观看 | 欧美午夜精品久久久久久孕妇 | 久久免费公开视频 | 色五月色开心色婷婷色丁香 | 国产精品 日韩 欧美 | 欧美五月婷婷 | 日日夜夜操av | 极品美女被弄高潮视频网站 | 香蕉视频在线播放 | 久久久久免费精品国产 | 一区二区中文字幕在线 | www免费视频com| 久久99久久99| 国产精品a久久 | av在线电影免费观看 | 成人网在线免费视频 | 97精品国产手机 | 色精品视频| 天天躁日日躁狠狠 | 久久99精品一区二区三区三区 | 久久亚洲二区 | 99久久精品无码一区二区毛片 | 日韩av在线高清 | 中文免费观看 | 国产精品综合久久久久 | 久久国产热 | 久久黄色小说 | 午夜精品成人一区二区三区 | 亚洲伦理精品 | 91理论电影 | 久久精品一区二区三 | 日韩在线视频观看免费 | 色婷婷www | 99视频久 | 亚洲黄a | 久久国产免 | 成人影片免费 | 综合五月婷婷 | 国模视频一区二区三区 | 精品毛片久久久久久 | v片在线看 | 欧美性生活久久 | 国产在线观看h | 在线三级av | 夜夜高潮夜夜爽国产伦精品 | 国产亚洲一区二区在线观看 | 久久久久久美女 | 免费在线观看av的网站 | 国产成人高清在线 | www色片| 日韩欧美一区二区三区黑寡妇 | 久久伦理电影网 | www.少妇| 久久99热这里只有精品 | 精品国产一区二区三区av性色 | 色七七亚洲影院 | 久草在线免费资源 | av在线专区| 又大又硬又黄又爽视频在线观看 | 久久综合偷偷噜噜噜色 | 日韩精品视频免费 | 成人黄性视频 | 日韩高清精品免费观看 | 日日综合 | 激情综合网五月 | 午夜少妇av| 天堂av影院| 日韩在线免费小视频 | 国产成人精品女人久久久 | 中文字幕一区二区三区精华液 | 中文字幕在线一二 | 91在线超碰 | 2023av| 一级黄色片毛片 | 日韩无在线 | 成人污视频在线观看 | 国产高清日韩欧美 | 最近免费观看的电影完整版 | 亚洲精品自拍 | 激情婷婷av| 99c视频高清免费观看 | 成年人在线免费看视频 | 人人搞人人干 | 天天综合久久 | 免费福利在线观看 | 91天堂素人约啪 | 91成人看片 | 99看视频在线观看 | 国产在线欧美 | 狠狠狠狠狠狠狠 | 91av视频网 | 在线免费观看视频一区二区三区 | 97精品国产91久久久久久 | 免费看v片| www.狠狠色.com | 亚洲综合色婷婷 | 精品国内自产拍在线观看视频 | 99亚洲精品在线 | 一级黄网 | 国产成人精品一区二区三区网站观看 | 成片免费观看视频大全 | 超碰个人在线 | 久久热亚洲 | 久久精品日韩 | av免费电影网站 | 激情五月婷婷综合 | 免费一级毛毛片 | 精品视频在线播放 | 视频在线99re | 夜夜躁狠狠燥 | 国产亚洲一区二区三区 | 99福利片 | www.夜夜草 | 日韩在线观看影院 | 日韩在线观看第一页 | 久久免费av电影 | 玖玖玖影院 | 久热这里有精品 | 丁香午夜婷婷 | 日本大尺码专区mv | 国产一级视频免费看 | 国产成本人视频在线观看 | 欧美夫妻生活视频 | 国产人成看黄久久久久久久久 | 最近日本中文字幕a | 99精品国产亚洲 | 91av在线免费看 | 日韩在线观看第一页 | 国内精品久久久久影院一蜜桃 | 欧美另类xxx | 98超碰人人 | 国产小视频福利在线 | 综合伊人av | 久久视频精品 | 91亚洲综合| 在线观看 国产 | 天天操·夜夜操 | 久久不色 | 日韩黄色在线电影 | 国产剧情在线一区 | 福利一区二区在线 | 麻豆视频在线观看 | 天天综合天天做天天综合 | 国产女v资源在线观看 | 国产精品一区免费在线观看 | 国产中文在线观看 | 五月激情丁香图片 | 久久国产成人午夜av影院潦草 | 久久精品99久久 | 在线之家免费在线观看电影 | 国产视频在线观看一区二区 | 亚洲激情精品 | 69精品在线观看 | 国产精品一区二区无线 | 91精品国产麻豆国产自产影视 | 在线播放精品一区二区三区 | 日韩欧美精品免费 | 久久久蜜桃一区二区 | 91免费观看视频在线 | 久久狠狠一本精品综合网 | 蜜桃麻豆www久久囤产精品 | 国产精品爽爽爽 | 免费观看一级一片 | 精品亚洲免费 | 国内外成人在线视频 | 国产黄色网| 国产精品久久久久久一区二区 | 麻豆免费在线视频 | 一区二区精品视频 | 天堂中文在线播放 | 国内精自线一二区永久 | 久久精品成人欧美大片古装 | 久久成人资源 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 欧美日比视频 | 天天色图 | 精品字幕在线 | 日韩在线一二三区 | 97视频亚洲 | 欧美精品在线观看免费 | 九九99 | 国产老妇av | 久久久国产精品人人片99精片欧美一 | 亚洲婷婷网 | 久久看看| 亚洲精品电影在线 | 国产在线精品一区二区 | 国产精品夜夜夜一区二区三区尤 | 久久永久免费视频 | 久久精品视频在线观看 | 国产一级视频 | 99re国产| 九九热有精品 | 丁香激情网 | 久久69av | 奇人奇案qvod | 亚洲一区av| 国产精品网站一区二区三区 | 国产午夜一区 | 久久99精品国产一区二区三区 | japanesefreesex中国少妇 | 精品理论片 | 在线成人一区二区 | 天天插天天干天天操 | 天天干.com | 国产小视频免费在线观看 | 免费亚洲精品 | 日韩精品一区二区不卡 | 成人观看 | 日韩理论在线 | 日韩羞羞 | 久久香蕉一区 | 在线免费黄色av | 国产麻豆成人传媒免费观看 | av中文字幕在线看 | 亚洲狠狠婷婷综合久久久 | 国产91精品久久久久 | 久久久久国产精品免费网站 | 久久理论影院 | 视频 国产区| 久久国产精品视频观看 | 美女激情影院 | 国内久久久久久 | 91豆花在线 | 在线观看视频在线 | 日本资源中文字幕在线 | 成年人视频在线免费 | 亚洲国内精品在线 | 国产成人精品av在线观 | 精品国产免费一区二区三区五区 | 欧美性黑人 | 五月天婷婷免费视频 | 久久精品视频网 | 日韩精品一区二区三区电影 | 婷婷av网站 | 97夜夜澡人人双人人人喊 | 激情视频一区 | 最新日韩在线观看视频 | 国产精品日韩久久久久 | 国产日韩在线视频 | 一区电影 | 成人一级黄色片 | 久久久高清视频 | 99视频免费观看 | 天天操天天吃 | 国产一区二区不卡视频 | 高清免费av在线 | 日本一区二区三区免费观看 | 欧美人人爱 | 日本中文字幕网站 | 五月婷婷影院 | 成人黄色小说视频 | 免费看污的网站 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲va欧洲va国产va不卡 | 四虎国产精品成人免费影视 | 9在线观看免费高清完整版 玖玖爱免费视频 | 久久久国产一区二区三区四区小说 | 玖玖视频国产 | 国产69久久久欧美一级 | 久草网站| 九九精品无码 | 成人久久久久久久久久 | 一区二区三区在线观看免费视频 | 激情欧美xxxx | 久久国产精品免费一区 | 久久成人资源 | 国产美女免费观看 | 日韩中文在线播放 | 国产又粗又猛又爽 | 久久69av| 欧美国产视频在线 | 国产韩国精品一区二区三区 | 胖bbbb搡bbbb擦bbbb | av免费观看网址 | 亚洲日本成人网 | 亚洲欧美视频在线观看 | 伊人久久av | 日韩欧美不卡 | 69精品人人人人 | 日韩欧美在线免费 | 亚洲精品三级 | 91入口在线观看 | 国产99久久九九精品免费 | 成人免费网视频 | 精品一区 精品二区 | 在线成人小视频 | 五月天国产精品 | 午夜精品中文字幕 | 国产婷婷精品 | 久久久久综合精品福利啪啪 | 欧美精品一区二区三区四区在线 | 黄色av三级在线 | 夜添久久精品亚洲国产精品 | 五月综合久久 | 国产色婷婷精品综合在线手机播放 | 日韩在线观看 | 国产在线a不卡 | 三级在线视频观看 | 88av网站| 欧美一二三视频 | 久久久免费高清视频 | 懂色av一区二区在线播放 | 97日日碰人人模人人澡分享吧 | 日韩资源在线 | 999亚洲国产996395 | 国产黄色大全 | 日韩欧美久久 | 欧洲成人av| 国产色道 | 人人爽人人爽人人爽学生一级 | 亚洲激情精品 | 天天玩天天干天天操 | 免费观看视频黄 | 精品国产亚洲在线 | 不卡视频一区二区三区 | 成年人在线观看网站 | 免费看毛片在线 | 探花视频在线观看免费版 | 麻豆视频免费在线播放 | 日韩,精品电影 | 三级a视频| 久久久 精品| 欧美国产日韩一区二区三区 | 国产精品夜夜夜一区二区三区尤 | 日韩在线三级 | 久久久久久久久久久成人 | 久久精品福利 | 久久香蕉国产精品麻豆粉嫩av | 人人超在线公开视频 | 亚洲精品91天天久久人人 | 国产午夜精品一区二区三区嫩草 | 五月婷婷综合久久 | 免费观看日韩 | 激情在线网址 | 成人av电影在线播放 | 99在线视频网站 | 国产午夜在线 | 24小时日本在线www免费的 | 成人欧美在线 | 综合网伊人 | 久久精品一区二区三区视频 | 九九热精品视频在线播放 | 免费一级特黄毛大片 | 国产午夜麻豆影院在线观看 | 中文字幕乱视频 | 四虎成人精品永久免费av | 国产精品久久久久一区二区 | 国产99久久精品一区二区300 | 国产精品久久久久久久久久东京 | 最近日本中文字幕 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 特级毛片在线免费观看 | 日韩久久久久久久久久 | 久久国产露脸精品国产 | 狠狠躁夜夜躁人人爽超碰91 | 精品久久久网 | 色狠狠狠 | 91在线免费观看网站 | 麻豆91精品视频 | 日韩视频免费在线 | 日韩在线免费不卡 | 亚洲免费av在线播放 | 国产精品欧美 | 日产乱码一二三区别在线 | 在线欧美最极品的av | 成人一区二区三区中文字幕 | 69精品 | 激情自拍av| 国产中文伊人 | 婷婷中文在线 | 99日韩精品 | 国产不卡片 | 一本一道久久a久久综合蜜桃 | 欧美激情在线看 | 91av中文字幕 | 国产午夜精品福利视频 | 2020天天干夜夜爽 | 在线观看日本高清mv视频 | 国产 成人 久久 | 欧美日韩国语 | 在线天堂中文在线资源网 | 亚洲丝袜中文 | 99色免费视频 | 天天干 夜夜操 | 99av国产精品欲麻豆 | 日本在线观看一区 | jizzjizzjizz亚洲 | 日本激情视频中文字幕 | 国产精品激情在线观看 | 久久精品影视 | 欧美国产精品久久久久久免费 | 国产中文字幕一区二区 | 中文字幕免费高 | 国产欧美久久久精品影院 | 日韩中文免费视频 | av不卡免费在线观看 | 精品在线观看一区二区三区 | 久草视频在线播放 | 中文国产在线观看 | 中日韩免费视频 | 日韩欧美视频在线观看免费 | 天天夜夜狠狠操 | 色综合人人 | 欧美久久久久久久久久久 | 国产综合久久 | 国产精品一区欧美 | 日日干美女 | 97国产大学生情侣白嫩酒店 | 国产一级片一区二区三区 | 日韩电影一区二区三区在线观看 | 一区二区三区在线电影 | 最新av免费在线观看 | 天堂成人在线 | 视频一区二区在线 | 日韩视频一区二区三区在线播放免费观看 | 日韩区在线观看 | 国产精品不卡一区 | 久久久久久久免费观看 | 91免费黄视频 | 天天天综合网 | 久久久久久久久免费 | 日本在线观看视频一区 | 91九色视频观看 | 日韩超碰 | 涩涩爱夜夜爱 | 色香蕉视频 | 欧美日韩xx| 欧美热久久 | 中文字幕在线播放av | 免费人成在线观看网站 | 精品国产乱码久久久久久天美 | 欧美极度另类性三渗透 | 天天操综合网站 | 国产乱码精品一区二区三区介绍 | 最新中文字幕在线播放 | 精品国产_亚洲人成在线 | 日韩福利在线观看 | 中文字幕五区 | 去干成人网 | 亚洲午夜激情网 | 在线观看中文字幕亚洲 | 成人小电影在线看 | 成人h动漫在线看 | 国产香蕉久久 | 久久影院一区 | 日韩在线中文字幕视频 | 国产成人精品日本亚洲999 | 少妇搡bbbb搡bbb搡忠贞 | 亚洲最快最全在线视频 | 免费在线观看黄色网 | 国产中文字幕网 | 黄色com | 日日夜夜精品网站 | 久久久婷 | 天天综合操 | 黄色三级免费网址 | 麻花豆传媒一二三产区 | 黄色一区三区 | 99精品久久精品一区二区 | 九九久久成人 | 啪啪肉肉污av国网站 | 欧美另类美少妇69xxxx | 久久99精品国产99久久 | 美女网站色免费 | 成人理论在线观看 | 精品国产中文字幕 | 人人澡澡人人 | 久久www免费视频 | 成人h在线播放 | 亚洲 综合 激情 | 亚洲午夜大片 | 丁香视频五月 | 久久人人爽人人人人片 | 91麻豆精品国产91久久久久久久久 | 国产高清av免费在线观看 | 成人黄色影片在线 | 国产麻豆视频免费观看 | 久久久久一区二区三区四区 | 久久久影院官网 | 欧美日韩精品在线免费观看 | 亚洲黄在线观看 | 成人国产精品免费 | 国内久久看 | 香蕉影视app | 91精品推荐| 欧美中文字幕第一页 | 人人澡人人干 | 国产亚洲婷婷免费 | 国产精品久久三 | 久久艹综合 | 成人午夜电影在线 | 日韩高清三区 | 999日韩| 国产99一区二区 | 亚洲视频456 | 亚洲国产精品久久久久 | 久青草影院 | 综合久久久久 | 亚洲综合在 | 婷婷丁香激情网 | 国产又粗又猛又色 | 亚洲国产97在线精品一区 | 精品少妇一区二区三区在线 | 国产精品一区二区久久精品爱涩 | 中文字幕在线播放日韩 | 亚洲精品乱码久久久久久蜜桃动漫 | 久久精品欧美一区二区三区麻豆 | 国产精品黑丝在线观看 | 六月丁香综合网 | 一二三久久久 | 久久国产影视 | 天天做天天爱天天综合网 | 亚州国产精品久久久 | 国产精品一区二区在线观看免费 | 亚洲视频在线观看 | 日韩福利在线观看 | 免费网站在线观看人 | 97免费中文视频在线观看 | 免费看久久久 | 欧美激情视频一区二区三区 | 91av视屏| 日韩黄色影院 | 永久精品视频 | 久久久久成人精品亚洲国产 | 最新不卡av| 亚洲视频 中文字幕 | 久草在线视频网 | 五月天激情婷婷 | 色资源二区在线视频 | 9797在线看片亚洲精品 | 亚洲一区久久久 | 香蕉视频色 | 成人网大片 | 日本中文不卡 | 人人看人人草 | 丁香五婷 | 在线 成人 | 香蕉视频亚洲 | 青青河边草观看完整版高清 | 国产免费片 | 欧美一性一交一乱 | 在线高清 | 插插插色综合 | 国产录像在线观看 | 亚洲成免费 | 免费观看黄 | 国产黄在线 | 日本黄色免费在线观看 | 国模视频一区二区 | 色综合天天狠狠 | 少妇av片| 菠萝菠萝在线精品视频 | 久久国产精品一二三区 | 亚洲毛片一区二区三区 | 日日干干夜夜 | 久草在线精品观看 | 香蕉视频网站在线观看 | 韩国av免费观看 | 九草在线视频 | 97在线播放 | 精品国产诱惑 | 免费看日韩 | 国产区免费在线 | www.夜色321.com| 最近高清中文在线字幕在线观看 | www.天天色 | 97视频在线观看免费 | 日韩av资源站 | 91精品国产成 | 久草在线在线视频 | 日韩欧美精品免费 | 国产美女免费观看 | 久久经典国产 | 成人中文字幕在线观看 | 日韩在线视 | 果冻av在线 | 综合网色| 久操伊人 | 天天爱天天色 | 亚洲,国产成人av | 国产一二三四在线视频 | 色综久久| 国产精品99久久久久久宅男 | 99久久综合精品五月天 | 亚洲精品玖玖玖av在线看 | av黄色影院| av黄色免费在线观看 | 久草在线视频免赞 | 日韩大片在线免费观看 | 国产精品中文字幕av | 五月综合 | 国产乱对白刺激视频在线观看女王 | 六月丁香婷婷网 | 久草在线视频看看 | 在线观看你懂的网站 | 日韩毛片在线一区二区毛片 | 欧美精品在线视频观看 | 99在线热播精品免费99热 | 五月天婷婷狠狠 | 亚洲开心激情 | 97夜夜澡人人爽人人免费 | 亚洲在线高清 | 91精品久久久久久 | av免费网页| 高清不卡一区二区在线 | 97视频在线免费观看 | 丁香花在线视频观看免费 | 久久九九国产精品 | 99视频一区 | 国产综合精品一区二区三区 | 国产一级二级在线播放 | 狠狠亚洲 | 久久国产精品视频免费看 | 六月婷婷久香在线视频 | 国产一级高清视频 | 最近中文字幕免费 | 又黄又刺激的视频 | 免费成人短视频 | 丁香婷婷综合激情 | 97视频免费在线观看 | 亚洲精品一区二区18漫画 | 男女视频久久久 | 成人h视频在线播放 | 日韩视频一区二区三区 | 超碰在线免费福利 | 久久免费视频7 | 中文字幕一区二区三区乱码不卡 | 久久久久99999 | 日韩欧美专区 | 在线观看成人小视频 | 日韩3区| 91av在线播放 | 欧美日韩国产页 | 97福利在线 | 91av亚洲| 久久五月精品 | 国产一级片免费播放 | 一区三区视频在线观看 | 亚洲精品国产精品国自 | 射射色| 国产剧情一区二区 | 免费一区在线 | 国产精品视频内 | 国产a级片免费观看 | 91亚洲精品国偷拍自产在线观看 | 免费福利片2019潦草影视午夜 | 国产精品久久二区 | 狠狠躁18三区二区一区ai明星 | 日韩一级片大全 | 中文字幕在线一区二区三区 | 91成人精品国产刺激国语对白 | 亚洲激情 在线 | 日韩视频1 | 国产精品毛片久久久久久久 | 国产一区国产精品 | 最近乱久中文字幕 | 国内精品福利视频 | 婷婷中文字幕在线观看 | 久久综合中文字幕 | 国产流白浆高潮在线观看 | 91私密视频 | 久久亚洲综合国产精品99麻豆的功能介绍 | 久久精品久久精品久久39 | 99国内精品久久久久久久 | 精品视频不卡 | 在线看的毛片 | 狠狠色丁香久久婷婷综合_中 | 亚洲国产精品第一区二区 | 久久久国产精品久久久 | 高清av在线免费观看 | 国产亚洲视频中文字幕视频 | 久久国产精品一二三区 | 五月天电影免费在线观看一区 | 91大神在线观看视频 | 中文字幕视频免费观看 | 高清在线观看av | 久久成人一区二区 | 色5月婷婷 | 亚洲欧美激情精品一区二区 | 亚洲午夜av久久乱码 | 国产成人综合图片 | 国产精品9区 | 久章草在线观看 | 国产亚洲视频在线免费观看 | 黄色国产高清 | 国产一区国产二区在线观看 | 日日夜夜精品免费 | 日韩高清在线一区二区三区 | 午夜在线观看一区 | 亚洲精品久久久久久久不卡四虎 | 黄色毛片电影 | 国产a高清 | 日日干av| 99久久精品免费看国产麻豆 | 成人h在线 | 国产伦理久久精品久久久久_ | 久久久久久综合 | 国产一区欧美日韩 | 九九精品在线观看 | 五月婷婷黄色 | 国产精品一区二区三区观看 | 久久国产精品免费一区二区三区 | 成人免费观看在线视频 | 成人在线一区二区 | 99精品国产在热久久下载 | 亚洲日韩欧美一区二区在线 | 香蕉视频导航 | 另类五月激情 | 亚洲黄色成人av | 国产在线播放一区二区 | 午夜三级在线 | 亚洲1级片 | 91污视频在线 | 国产中文字幕一区 | 久久涩视频| 国产精品中文久久久久久久 | 97色在线观看免费视频 | 91日韩精品一区 | 日韩女同一区二区三区在线观看 | 欧美天天干 | www.五月激情.com | 91在线精品播放 | 亚洲精品h | 国产 字幕 制服 中文 在线 | 免费看成人av | 欧美一级激情 | 亚洲精区二区三区四区麻豆 | 亚洲天天在线日亚洲洲精 | 国内精品视频在线 | 成人黄色电影免费观看 | 亚洲成人av一区二区 | 欧美日性视频 | 亚洲国产资源 | 国产成人av福利 | 国产麻豆精品免费视频 | 亚洲自拍av在线 | 亚洲一级片在线观看 | 婷婷5月激情5月 | 日韩二级毛片 | 成人91视频 | 日本激情视频中文字幕 | 亚洲国产高清在线观看视频 | 亚洲激情综合网 | 五月婷婷电影网 | 日韩一区在线播放 | 亚洲天堂激情 | 在线观看成人 | 久99久中文字幕在线 | 91精品国产自产老师啪 | 日韩免费中文字幕 | 久久夜靖品| 黄色91免费观看 | 韩国一区二区av | 天天干,天天操,天天射 | 色香蕉在线 | 日日爱999| 美女性爽视频国产免费app | 18做爰免费视频网站 | 国产日韩欧美在线影视 | 中文有码在线视频 | 国产资源在线视频 | 一区二区三区在线不卡 | 久久国产电影院 | 久久久久免费电影 | 亚洲蜜桃在线 | 亚洲日韩中文字幕 | 中文字幕无吗 | 中文字幕 第二区 | 六月天综合网 | 在线视频亚洲 | 在线观看网站你懂的 | 中文字幕精品一区二区三区电影 | 成人黄色电影免费观看 | 亚洲国产精品电影 | 亚洲91精品| 黄色一级大片在线免费看产 | 免费电影一区二区三区 | 不卡的av在线播放 | 色婷婷成人网 | 欧美成人精品三级在线观看播放 | 成年人免费在线观看网站 | 国产精品免费人成网站 | www.天天射.com | 国产在线永久 | 久久在线观看视频 | 国产在线视频一区 | 黄色av免费电影 | 国产一区二区三区免费在线观看 | 国产看片免费 | 婷婷网站天天婷婷网站 | 欧洲精品码一区二区三区免费看 | 在线观看 亚洲 | 日韩av有码在线 | 久久国产精品一二三区 | www久草| 久久国产精品视频观看 | av黄色大片 | 国产一区二区精品 | 毛片随便看 | 国产一级免费视频 | 久久婷婷综合激情 | 欧美在线不卡一区 | 国模一二三区 | 天堂av在线中文在线 | 天堂激情网 | 久久精品国产一区二区三 | 日本精品免费看 | 久草观看 | 天天做日日做天天爽视频免费 | 久久精品国产成人 | 久久一区二区三区日韩 | 国产天天爽 | 久久刺激视频 | 国产精品v欧美精品v日韩 | 欧美视频一区二 | 欧美精品做受xxx性少妇 | www,黄视频 | 国产精品综合av一区二区国产馆 | ,久久福利影视 | 欧美日韩三级 | 亚洲成人软件 | 久久看片网站 | 日韩a在线 | av免费黄色 | 久久久国产精品一区二区中文 | 午夜色站| 综合久久精品 | 91久久黄色 | 狠狠色丁香久久婷婷综合丁香 | 91在线视频免费观看 | 香蕉在线视频播放网站 | 日韩三区在线 | 999视频在线播放 | 日韩精品久久一区二区三区 | 国产精品欧美久久久久无广告 | 四虎国产精品免费 | 99r精品视频在线观看 | 国产精品大片在线观看 | 国产福利专区 | 96精品在线 | 国产精品永久免费观看 | 99久久精品国产一区 | 91精品导航 | 久久久久国产视频 | 973理论片235影院9 | 国产精品热视频 | 国产视频 亚洲视频 | 日韩免费视频在线观看 | 91漂亮少妇露脸在线播放 | 狠狠色噜噜狠狠狠 | 亚洲激情 欧美激情 | 9ⅰ精品久久久久久久久中文字幕 | 91精品视频导航 | 人人爱人人做人人爽 | 久久精彩视频 | 91探花国产综合在线精品 | 色综合五月天 | 国产夫妻av在线 | 在线中文字幕播放 | 丁香综合网 | 色综合久久久久综合体桃花网 | 视频在线观看入口黄最新永久免费国产 | 日本福利视频在线 | 九九九免费视频 | 日韩av中文在线 | 日韩av一区二区三区四区 | 亚洲一区二区精品 | 天天射天天射天天射 | 91大神一区二区三区 | 亚洲黄色在线观看 | 精品国产免费久久 | 国产精品久久久久高潮 | 最近中文字幕免费视频 | 黄色免费网站大全 | 免费在线观看视频a | 天天爱天天操天天爽 | 亚洲精品在线免费播放 | 91麻豆精品国产 | 国产精品观看在线亚洲人成网 | 久久综合九色99 | 四虎天堂| 国产精品乱码一区二区视频 | 日韩综合第一页 | 久久免费视频1 | 人人涩| 久久99欧美| 国内一区二区视频 | 日本精品久久久久 | 亚洲精品美女在线 | 日韩欧美一区二区三区视频 | 亚洲色图激情文学 | 欧美在线free | 国产精品国产亚洲精品看不卡 | 久久成熟| 久久久99精品免费观看app | 亚洲欧洲精品一区 | 综合激情 | 成人a毛片 | 成人app在线免费观看 | 91亚洲国产成人 | 国产精品久久99综合免费观看尤物 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 欧美吞精 | 欧美一区二区在线免费观看 | 久久久久久久久久久久久久电影 | 91人人揉日日捏人人看 | 蜜臀精品久久久久久蜜臀 | 特黄特黄的视频 | 久久夜靖品 | 91精品国产自产在线观看永久 | 激情五月视频 | 999在线视频 | 99在线观看视频网站 | 狠色在线| 激情av资源网 | 一区二区三区四区精品 | 国产一区国产二区在线观看 | 天天插狠狠插 | 免费视频黄| 亚洲综合视频网 | 国内精品久久久久久久久久 | 福利片视频区 | 国内偷拍精品视频 | 日韩久久在线 | 一区二区精品视频 | 福利视频午夜 | 免费成视频 | 国产成a人亚洲精v品在线观看 | av在线电影免费观看 | 久久69精品久久久久久久电影好 | 久久国产视频网 | 免费无遮挡动漫网站 | 亚洲天堂网站视频 | 天堂av在线免费观看 | 在线播放视频一区 | 99久热| 色伊人网| 91丨九色丨首页 |