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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言反汇编 - 函数与结构体

發(fā)布時(shí)間:2023/12/31 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言反汇编 - 函数与结构体 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

反匯編(Disassembly) 即把目標(biāo)二進(jìn)制機(jī)器碼轉(zhuǎn)為匯編代碼的過程,該技術(shù)常用于軟件破解、外掛技術(shù)、病毒分析、逆向工程、軟件漢化等領(lǐng)域,學(xué)習(xí)和理解反匯編對軟件調(diào)試、系統(tǒng)漏洞挖掘、內(nèi)核原理及理解高級語言代碼都有相當(dāng)大的幫助,軟件一切神秘的運(yùn)行機(jī)制全在反匯編代碼里面。

函數(shù)是任何一個(gè)高級語言中必須要存在的一個(gè)東西,使用函數(shù)式編程可以讓程序可讀性更高,充分發(fā)揮了模塊化設(shè)計(jì)思想的精髓,今天我將帶大家一起來探索函數(shù)的實(shí)現(xiàn)機(jī)理,探索編譯器到底是如何對函數(shù)這個(gè)關(guān)鍵字進(jìn)行實(shí)現(xiàn)的,從而更好地理解編譯行為。

先來研究函數(shù),函數(shù)是任何一門編程語言中都存在的關(guān)鍵字,使用函數(shù)式編程可以讓程序可讀性更高,充分發(fā)揮模塊化設(shè)計(jì)思想的精髓,而函數(shù)傳參的底層實(shí)現(xiàn)就是通過堆棧來實(shí)現(xiàn)的,首先我們來理解一下堆棧.

當(dāng)有參函數(shù)被執(zhí)行時(shí),通常會根據(jù)不同的調(diào)用約定來對參數(shù)進(jìn)行壓棧存儲

以STDcall約定為例,棧的調(diào)用原則是先進(jìn)后出,最先被push到堆棧中的數(shù)據(jù)會被最后釋放出來,而CPU中有兩個(gè)寄存器專門用于維護(hù)堆棧的變化,ESP棧頂寄存器,EBP棧底寄存器(基址),這兩個(gè)寄存器就像是好基友,兩個(gè)寄存器相互配合,來讓堆棧有條不亂.

棧幀:就是ESP -> EBP 之間的空間,通常是調(diào)用函數(shù)時(shí),函數(shù)的參數(shù),從一個(gè)函數(shù)切換到另一個(gè)函數(shù)上,棧幀也會發(fā)生變化,當(dāng)函數(shù)調(diào)用結(jié)束后,則需要平棧幀,不然會發(fā)生訪問沖突,平棧幀的過程都是有編譯器來解決的。

逆向分析函數(shù)實(shí)現(xiàn)機(jī)制

函數(shù)與堆棧的基礎(chǔ): 下面一個(gè)簡單的函數(shù)調(diào)用案例,我們來看看匯編格式是怎樣的.

#include <stdio.h>int VoidFunction() {printf("hello lyshark\n");return 0; }int main(int argc, char* argv[]) {VoidFunction();return 0; }

編譯上面的這段代碼,首先我們找到main函數(shù)的位置,然后會看到call 0x4110E1這條匯編指令就是在調(diào)用VoidFunction()函數(shù),觀察函數(shù)能發(fā)現(xiàn)函數(shù)下方并沒有add esp,xxx這樣的指令,則說明平棧操作是在函數(shù)的內(nèi)部完成的,我們直接跟進(jìn)去看看函數(shù)內(nèi)部到底做了什么見不得人的事情.

0041142C | 8DBD 40FFFFFF | lea edi,dword ptr ss:[ebp-0xC0] | 00411432 | B9 30000000 | mov ecx,0x30 | 00411437 | B8 CCCCCCCC | mov eax,0xCCCCCCCC | 0041143C | F3:AB | rep stosd | 0041143E | E8 9EFCFFFF | call 0x4110E1 | 調(diào)用VoidFunction() 00411443 | 33C0 | xor eax,eax | main.c:13 00411445 | 5F | pop edi | main.c:14, edi:"閉\n" 00411446 | 5E | pop esi | esi:"閉\n" 00411447 | 5B | pop ebx |

此時(shí)我們直接跟進(jìn)call 0x4110E1這個(gè)函數(shù)中,分析函數(shù)內(nèi)部是如何平棧的,進(jìn)入函數(shù)以后首先使用push ebp保存當(dāng)前EBP指針位置,然后調(diào)用mov ebp,esp這條指令來將當(dāng)前的棧幀付給EBP也就是當(dāng)基址使用,sub esp,0xC0則是分配局部變量,接著是push ebx,esi,edi則是因?yàn)槲覀冃枰玫竭@幾個(gè)寄存器所以應(yīng)該提前將原始值保存起來,最后用完了就需要pip edi,esi,ebx恢復(fù)這些寄存器的原始狀態(tài),并執(zhí)行add esp,0xC0對局部變量進(jìn)行恢復(fù),最后mov esp,ebp還原到原始的棧頂指針位置,首尾呼應(yīng).

004113C0 | 55 | push ebp | 保存棧底指針 ebp 004113C1 | 8BEC | mov ebp,esp | 將當(dāng)前棧指針給ebp 004113C3 | 81EC C0000000 | sub esp,0xC0 | 抬高棧頂esp,開辟局部空間 004113C9 | 53 | push ebx | 保存 ebx 004113CA | 56 | push esi | 保存 esi 004113CB | 57 | push edi | 保存 edi 004113CC | 8DBD 40FFFFFF | lea edi,dword ptr ss:[ebp-0xC0] | 取出次函數(shù)可用??臻g首地址 004113D2 | B9 30000000 | mov ecx,0x30 | ecx:"閉\n", 30:'0' 004113D7 | B8 CCCCCCCC | mov eax,0xCCCCCCCC | 004113DC | F3:AB | rep stosd | 004113DE | 8BF4 | mov esi,esp | main.c:5 004113E0 | 68 58584100 | push consoleapplication1.415858 | 415858:"hello lyshark\n" 004113E5 | FF15 14914100 | call dword ptr ds:[<&printf>] | 調(diào)用printf 004113EB | 83C4 04 | add esp,0x4 | 降低棧頂esp,釋放printf局部空間 004113EE | 3BF4 | cmp esi,esp | 檢測堆棧是否平衡,ebp!=esp則不平衡 004113F0 | E8 46FDFFFF | call 0x41113B | 堆棧檢測函數(shù):檢測平衡,不平衡則報(bào)錯(cuò) 004113F5 | 33C0 | xor eax,eax | main.c:6 004113F7 | 5F | pop edi | 還原寄存器edi 004113F8 | 5E | pop esi | 還原寄存器esi 004113F9 | 5B | pop ebx | 還原寄存器ebx 004113FA | 81C4 C0000000 | add esp,0xC0 | 恢復(fù)esp,還原局部變量 00411400 | 3BEC | cmp ebp,esp | 00411402 | E8 34FDFFFF | call 0x41113B | 00411407 | 8BE5 | mov esp,ebp | 還原原始的ebp指針 00411409 | 5D | pop ebp | 0041140A | C3 | ret |

上方的代碼其實(shí)默認(rèn)走的是STDCALL的調(diào)用約定,一般情況下在Win32環(huán)境默認(rèn)遵循的就是STDCALL,而在Win64環(huán)境下使用的則是FastCALL,在Linux系統(tǒng)上則遵循SystemV的約定,這里我整理了他們之間的異同點(diǎn).

這里我們來演示CDECL的調(diào)用約定,其實(shí)我們使用的Printf()函數(shù)就是在遵循__cdecl()約定,由于Printf函數(shù)可以有多個(gè)參數(shù)傳遞,所以只能使用__cdecl()約定來傳遞參數(shù),該約定的典型特點(diǎn)就是平棧不在被調(diào)用函數(shù)內(nèi)部完成,而是在外部通過使用一條add esp,0x4這種方式來平棧的.

004113E0 | 68 58584100 | push consoleapplication1.415858 | 415858:"hello lyshark\n" 004113E5 | FF15 14914100 | call dword ptr ds:[<&printf>] | 004113EB | 83C4 04 | add esp,0x4 | 平棧 004113EE | 3BF4 | cmp esi,esp | 004113F0 | E8 46FDFFFF | call 0x41113B | 004113F5 | 8BF4 | mov esi,esp | main.c:6 004113F7 | 68 58584100 | push consoleapplication1.415858 | 415858:"hello lyshark\n" 004113FC | FF15 14914100 | call dword ptr ds:[<&printf>] | 平棧 00411402 | 83C4 04 | add esp,0x4 |

在使用Release版對其進(jìn)行優(yōu)化的話,此段代碼將會采取復(fù)寫傳播優(yōu)化,將每次參數(shù)平衡的操作進(jìn)行歸并,一次性平衡棧頂指針esp,從而可以大大的提高程序的執(zhí)行效率,匯編代碼如下:

004113E0 | 68 58584100 | push consoleapplication1.415858 | 415858:"hello lyshark\n" 004113E5 | FF15 14914100 | call dword ptr ds:[<&printf>] | 004113F7 | 68 58584100 | push consoleapplication1.415858 | 415858:"hello lyshark\n" 004113FC | FF15 14914100 | call dword ptr ds:[<&printf>] | 00411402 | 83C4 04 | add esp,0x8 | 一次性平棧加上0x8,平了前面的2個(gè)push

通過以上分析發(fā)現(xiàn)_cdecl與_stdcall兩者只在參數(shù)平衡上有所不同,其余部分都一樣,但經(jīng)過優(yōu)化后_cdecl調(diào)用方式的函數(shù)在同一作用域內(nèi)多次使用,會在效率上比_stdcall髙,這是因?yàn)開cdecl可以使用復(fù)寫傳播,而_stdcall的平棧都是在函數(shù)內(nèi)部完成的,無法使用復(fù)寫傳播這種優(yōu)化方式.

除了前面的兩種調(diào)用約定以外_fastcall調(diào)用方式的效率最髙,其他兩種調(diào)用方式都是通過棧傳遞參數(shù),唯獨(dú)_fastcall可以利用寄存器傳遞參數(shù),但由于寄存器數(shù)目很少,而參數(shù)相比可以很多,只能量力而行,故在Windows環(huán)境中_fastcall的調(diào)用方式只使用了ECX和EDX寄存器,分別傳遞第1個(gè)參數(shù)和第2個(gè)參數(shù),其余參數(shù)傳遞則依然使用堆棧傳遞.

#include <stdio.h>void _fastcall VoidFunction(int x,int y,int z,int a) {printf("%d%d%d%d\n", x, y, z, a); }int main(int argc, char* argv[]) {VoidFunction(1,2,3,4);return 0; }

反匯編后觀察代碼發(fā)現(xiàn)call 0x4110E6就是在調(diào)用我們的VoidFunction()函數(shù)在調(diào)用之前分別將參數(shù)壓入了不同的寄存器和堆棧中,接著我們繼續(xù)跟進(jìn)到call函數(shù)內(nèi)部,看它是如何取出參數(shù)的.

0041145E | 6A 04 | push 0x4 | 第四個(gè)參數(shù)使用堆棧傳遞 00411460 | 6A 03 | push 0x3 | 第三個(gè)參數(shù)使用堆棧傳遞 00411462 | BA 02000000 | mov edx,0x2 | 第二個(gè)參數(shù)使用edx傳遞 00411467 | B9 01000000 | mov ecx,0x1 | 第一個(gè)參數(shù)使用ecx傳遞 0041146C | E8 75FCFFFF | call 0x4110E6 | 00411471 | 33C0 | xor eax,eax | main.c:11

進(jìn)入call 0x4110E6這個(gè)函數(shù)中,觀察發(fā)現(xiàn)首先會通過mov指令將前兩個(gè)參數(shù)提取出來,然后再從第四個(gè)參數(shù)開始依次將參數(shù)取出來并壓棧,最后讓Printf函數(shù)成功調(diào)用到.

004113E0 | 8955 EC | mov dword ptr ss:[ebp-0x14],edx | edx => 提取出第二個(gè)參數(shù) 004113E3 | 894D F8 | mov dword ptr ss:[ebp-0x8],ecx | ecx => 提取出第一個(gè)參數(shù) 004113E6 | 8BF4 | mov esi,esp | main.c:5 004113E8 | 8B45 0C | mov eax,dword ptr ss:[ebp+0xC] | 保存第四個(gè)參數(shù) 004113EB | 50 | push eax | 004113EC | 8B4D 08 | mov ecx,dword ptr ss:[ebp+0x8] | 保存第三個(gè)參數(shù) 004113EF | 51 | push ecx | 004113F0 | 8B55 EC | mov edx,dword ptr ss:[ebp-0x14] | 保存第二個(gè)參數(shù) 004113F3 | 52 | push edx | 004113F4 | 8B45 F8 | mov eax,dword ptr ss:[ebp-0x8] | 保存第一個(gè)參數(shù) 004113F7 | 50 | push eax | 004113F8 | 68 58584100 | push consoleapplication1.415858 | 415858:"%d%d%d%d\n" 004113FD | FF15 14914100 | call dword ptr ds:[<&printf>] | 00411403 | 83C4 14 | add esp,0x14 | 平棧

定義并使用有參函數(shù): 我們給函數(shù)傳遞些參數(shù),然后分析其反匯編代碼,觀察代碼的展示形式.

#include <stdio.h>int Function(int x,float y,double z) {if (x = 100){x = x + 100;y = y + 100;z = z + 100;}return (x); }int main(int argc, char* argv[]) {int ret = 0;ret = Function(100, 2.5, 10.245);printf("返回值: %d\n", ret);return 0; }

下方的反匯編代碼就是調(diào)用函數(shù)ret = Function()的過程,該過程中可看出壓棧順序遵循的是從后向前壓入的.

0041145E | C745 F8 00000000 | mov dword ptr ss:[ebp-0x8],0x0 | main.c:17 00411465 | 83EC 08 | sub esp,0x8 | main.c:18 00411468 | F2:0F1005 70584100 | movsd xmm0,qword ptr ds:[<__real@40247d70a3d70a3d>] | 將10.245放入XMM0寄存器 00411470 | F2:0F110424 | movsd qword ptr ss:[esp],xmm0 | 取出XMM0中內(nèi)容,并放入堆棧 00411475 | 51 | push ecx | 00411476 | F3:0F1005 68584100 | movss xmm0,dword ptr ds:[<__real@40200000>] | 將2.5放入XMM0 0041147E | F3:0F110424 | movss dword ptr ss:[esp],xmm0 | 同理 00411483 | 6A 64 | push 0x64 | 最后一個(gè)參數(shù)100 00411485 | E8 51FDFFFF | call 0x4111DB | 調(diào)用Function函數(shù) 0041148A | 83C4 10 | add esp,0x10 | 0041148D | 8945 F8 | mov dword ptr ss:[ebp-0x8],eax | 將返回值壓棧 00411490 | 8BF4 | mov esi,esp | main.c:19 00411492 | 8B45 F8 | mov eax,dword ptr ss:[ebp-0x8] | 00411495 | 50 | push eax | 00411496 | 68 58584100 | push consoleapplication1.415858 | 415858:"返回值: %d\n" 0041149B | FF15 14914100 | call dword ptr ds:[<&printf>] | 輸出結(jié)果 004114A1 | 83C4 08 | add esp,0x8 |

壓棧完成以后我們可以繼續(xù)跟進(jìn)call 0x4111DB這個(gè)關(guān)鍵CALL,此處就是運(yùn)算數(shù)據(jù)的關(guān)鍵函數(shù),跟進(jìn)去以后,可發(fā)現(xiàn)其對浮點(diǎn)數(shù)的運(yùn)算,完全是依靠XMM寄存器實(shí)現(xiàn)的.

004113F1 | 8945 08 | mov dword ptr ss:[ebp+0x8],eax | 004113F4 | F3:0F1045 0C | movss xmm0,dword ptr ss:[ebp+0xC] | main.c:8 004113F9 | F3:0F5805 8C584100 | addss xmm0,dword ptr ds:[<__real@42c80000>] | 00411401 | F3:0F1145 0C | movss dword ptr ss:[ebp+0xC],xmm0 | 00411406 | F2:0F1045 10 | movsd xmm0,qword ptr ss:[ebp+0x10] | main.c:9 0041140B | F2:0F5805 80584100 | addsd xmm0,qword ptr ds:[<__real@4059000000000000>] | 00411413 | F2:0F1145 10 | movsd qword ptr ss:[ebp+0x10],xmm0 | 00411418 | 8B45 08 | mov eax,dword ptr ss:[ebp+0x8] | main.c:11

向函數(shù)傳遞數(shù)組/指針: 這里我們以一維數(shù)組為例,二維數(shù)組的傳遞其實(shí)和一維數(shù)組是相通的,只不過在尋址方式上要使用二維數(shù)組的尋址公式,此外傳遞數(shù)組其實(shí)本質(zhì)上就是傳遞指針,所以數(shù)組與指針的傳遞方式也是相通的.

#include <stdio.h>void Function(int Array[], int size) {for (int i = 0; i<size; ++i){printf("輸出元素: %d \n", Array[i]);} }int main(int argc, char* argv[]) {int ary[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };Function(ary, 10);return 0; }

以下代碼就是Function(ary,10)函數(shù)的調(diào)用代碼,首先壓棧傳遞0A也就是10,接著傳遞ary首地址,最后調(diào)用call指令.

004114B4 | 6A 0A | push 0xA | 10 004114B6 | 8D45 D4 | lea eax,dword ptr ss:[ebp-0x2C] | ary 首地址 004114B9 | 50 | push eax | push eax 004114BA | E8 63FCFFFF | call 0x411122 | 調(diào)用Function() 004114BF | 83C4 08 | add esp,0x8 | 堆棧修復(fù)

函數(shù)中返回指針,其實(shí)就是返回一個(gè)內(nèi)存地址,我們可以打印出這個(gè)內(nèi)存地址具體的值,如下是一段測試代碼,這里的原理于上方都是相通的,此處就不在浪費(fèi)篇幅了.

#include <stdio.h>int GetAddr(int number) {int nAddr;nAddr = *(int*)(&number-1);return nAddr; }int main(int argc, char* argv[]) {int address = 0;address = GetAddr(100);printf("%x\n",address);return 0; }

函數(shù)的參數(shù)傳遞就到此結(jié)束了,其實(shí)其他的參數(shù)傳遞無外乎就是上面的這幾種傳遞形式,只是在某些實(shí)現(xiàn)細(xì)節(jié)上略有差異,但大體上也就是這些東西,在真正的逆向過程中還需要考慮編譯器的版本等具體細(xì)節(jié),每一個(gè)編譯器在實(shí)現(xiàn)參數(shù)傳遞上都略微不同,這也就是編譯特性所影響的,我們應(yīng)該靈活運(yùn)用這些知識,才能更好地分析這些字節(jié)碼.

變量作用域解析

接著我們來研究一下變量的作用域,在C語言中作用域可分為局部變量與全局變量,兩種變量又分為靜態(tài)變量和動態(tài)變量,接下來我們將通過反匯編學(xué)習(xí)研究他們之間的異同點(diǎn).

探索全局變量的奧秘: 全局變量與常量有很多相似的地方,兩者都是在程序執(zhí)行前就存在的,這是因?yàn)榫幾g器在編譯時(shí)就將其寫入到的程序文件里,但是在PE文件中的只讀數(shù)據(jù)節(jié)里,常量的節(jié)屬性被修飾為不可寫入,而全局變量和靜態(tài)變量的屬性為可讀可寫,PE文件加載器在加載可執(zhí)行文件時(shí),會率先裝載這些常量與全局變量,然后才會運(yùn)行程序入口代碼,因此這些全局變量可以不受作用域的影響,在程序中的任何位置都可以被訪問和使用,來看一段C代碼:

#include <stdio.h> int number1 = 1; int number2 = 2;int main(int argc, char* argv[]) {scanf("%d", &number1);printf("您輸入的數(shù)字: %d\n", number1);number2 = 100;return 0; }

如下反匯編代碼可以看出,全局變量的訪問是直接通過立即數(shù)push consoleapplication1.415858訪問的,此立即數(shù)是通過編譯器編譯時(shí)就寫入到了程序中的,所以也就可以直接進(jìn)行訪問了.

004113E0 | 68 00804100 | push <consoleapplication1._number1> | 此處的壓棧參數(shù)就是全局變量 004113E5 | 68 58584100 | push consoleapplication1.415858 | 415858:"%d" 004113EA | FF15 10914100 | call dword ptr ds:[<&scanf>] | 004113F0 | 83C4 08 | add esp,0x8 | 保存第二個(gè)參數(shù) 004113F3 | 3BF4 | cmp esi,esp | 004113F5 | E8 41FDFFFF | call 0x41113B | 004113FA | 8BF4 | mov esi,esp | main.c:9 004113FC | A1 00804100 | mov eax,dword ptr ds:[<_number1>] | 00411401 | 50 | push eax | 00411402 | 68 5C584100 | push consoleapplication1.41585C | 41585C:"您輸入的數(shù)字: %d\n" 00411407 | FF15 18914100 | call dword ptr ds:[<&printf>] | 0041140D | 83C4 08 | add esp,0x8 | 00411410 | 3BF4 | cmp esi,esp | 00411412 | E8 24FDFFFF | call 0x41113B | 00411417 | C705 04804100 64000000 | mov dword ptr ds:[<_number2>],0x64 | main.c:11, 64:'d' 00411421 | 33C0 | xor eax,eax | main.c:12

探索局部變量的奧秘: 局部變量的訪問是通過棧指針相對間接訪問,也就是說局部變量是程序動態(tài)創(chuàng)建的,通常是調(diào)用某個(gè)函數(shù)或過程時(shí)動態(tài)生成的,局部變量作用域也僅限于函數(shù)內(nèi)部,且其地址也是一個(gè)未知數(shù),編譯器無法預(yù)先計(jì)算.

#include <stdio.h>int main(int argc, char* argv[]) {int num1 = 0;int num2 = 1;scanf("%d", &num1);printf("%d", num1);num2 = 10;return 0; }

反匯編代碼,局部變量就是通過mov dword ptr ss:[ebp-0x8],0x0動態(tài)開辟的空間,其作用域就是在本函數(shù)退出時(shí)消亡.

004113DE | C745 F8 00000000 | mov dword ptr ss:[ebp-0x8],0x0 | 申請局部變量 004113E5 | C745 EC 01000000 | mov dword ptr ss:[ebp-0x14],0x1 | main.c:6 004113EC | 8BF4 | mov esi,esp | main.c:8 004113EE | 8D45 F8 | lea eax,dword ptr ss:[ebp-0x8] | 004113F1 | 50 | push eax | 004113F2 | 68 58584100 | push consoleapplication1.415858 | 415858:"%d" 004113F7 | FF15 10914100 | call dword ptr ds:[<&scanf>] |

說到局部變量,不得不提起局部靜態(tài)變量,局部靜態(tài)變量的聲明只需要使用static關(guān)鍵字聲明,該變量比較特殊,他不會隨作用域的結(jié)束而消亡,并且也是在未進(jìn)入作用域之前就已經(jīng)存在了,其實(shí)局部靜態(tài)變量也是全局變量,只不過它的作用域被限制在了某一個(gè)函數(shù)內(nèi)部而已,所以它本質(zhì)上還是全局變量,來一段代碼驗(yàn)證一下:

#include <stdio.h>int main(int argc, char* argv[]) {static int g_number = 0;for (int x = 0; x <= 10; x++){g_number = x;printf("輸出: %d\n", g_number);}return 0; }

觀察這段反匯編代碼,你能夠清晰的看出,同樣是使用mov eax,dword ptr ds:[<g_number>]從全局?jǐn)?shù)據(jù)區(qū)取數(shù)據(jù)的,這說明局部變量聲明為靜態(tài)屬性以后,就和全局變量變成了一家人了.

004113DE | C745 F8 00000000 | mov dword ptr ss:[ebp-0x8],0x0 | main.c:7 004113E5 | EB 09 | jmp 0x4113F0 | 004113E7 | 8B45 F8 | mov eax,dword ptr ss:[ebp-0x8] | 004113EA | 83C0 01 | add eax,0x1 | 004113ED | 8945 F8 | mov dword ptr ss:[ebp-0x8],eax | 004113F0 | 837D F8 0A | cmp dword ptr ss:[ebp-0x8],0xA | A:'\n' 004113F4 | 7F 27 | jg 0x41141D | 004113F6 | 8B45 F8 | mov eax,dword ptr ss:[ebp-0x8] | main.c:9 004113F9 | A3 30814100 | mov dword ptr ds:[<g_number>],eax | 004113FE | 8BF4 | mov esi,esp | main.c:10 00411400 | A1 30814100 | mov eax,dword ptr ds:[<g_number>] | 與全局變量是一家人 00411405 | 50 | push eax | 00411406 | 68 58584100 | push consoleapplication1.415858 | 415858:"輸出: %d\n" 0041140B | FF15 14914100 | call dword ptr ds:[<&printf>] | 00411411 | 83C4 08 | add esp,0x8 | 00411414 | 3BF4 | cmp esi,esp | 00411416 | E8 1BFDFFFF | call 0x411136 | 0041141B | EB CA | jmp 0x4113E7 | main.c:11 0041141D | 33C0 | xor eax,eax | main.c:12

探索堆變量的奧秘: 堆變量是最容易識別的一種變量類型,因?yàn)榉峙涠褏^(qū)的函數(shù)就幾個(gè)calloc/malloc/new等,所以這類變量往往能被調(diào)試器直接補(bǔ)貨到,這種變量同樣屬于局部變量的范疇,因?yàn)樗彩峭ㄟ^函數(shù)動態(tài)申請的一段內(nèi)存空間,這里只給出一個(gè)案例吧,反編譯大家可以自己研究,這一個(gè)是很簡單的了.

#include <stdlib.h> #include <stdio.h>int main(int argc, char* argv[]) {int *pMalloc = (int*)malloc(10);printf("變量地址: %x", pMalloc);free(pMalloc);return 0; }

結(jié)構(gòu)體與共用體

針對C語言的反匯編,就剩一個(gè)結(jié)構(gòu)體與共用體了,這里的內(nèi)容比較少,我就不再新的文章里寫了,直接在這里把它給寫完,C語言的反匯編就到此結(jié)束。

C語言提供給我們了一些由系統(tǒng)定義的數(shù)據(jù)類型,我們也可以自己定義這樣的數(shù)據(jù)類型,結(jié)構(gòu)體與共用體就是用來定義一些比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu)的這么一個(gè)方法,定義結(jié)構(gòu)很簡單只需要使用struct關(guān)鍵字即可,定義共用體則使用union來實(shí)現(xiàn),接下來將分別演示它們之間的反匯編狀態(tài).

首先我們來定義tag結(jié)構(gòu)體,假設(shè)結(jié)構(gòu)體中的當(dāng)前數(shù)據(jù)成員類型長度為M,指定對其值為N,那么實(shí)際對其值為Q = min(M,N),其成員的地址將被編譯器安排在Q的倍數(shù)上,例如默認(rèn)8字節(jié)對齊,則需要安排在8,16,24,32字節(jié)之間,如下結(jié)構(gòu)體.

struct tag{short sShort; // 占用2字節(jié)的空間int nInt; // 占用4字節(jié)的空間double dDouble; // 占用8字節(jié)的空間 }

在VS編譯器中默認(rèn)數(shù)據(jù)塊的對其值是8字節(jié),上方定義的tag結(jié)構(gòu)中sShort占用2個(gè)字節(jié)的空間,而nInt則占用4字節(jié)的空間,dDouble則占用8字節(jié)的存儲空間,那么結(jié)構(gòu)體成員的總長度8+4+2=14bytes按照默認(rèn)的對其值8字節(jié)來對其,結(jié)構(gòu)體分配空間需要被8整除,也就是最低要分配16字節(jié)的空間給tag這個(gè)結(jié)構(gòu),那么編譯器會自動在14字節(jié)的基礎(chǔ)上增加2字節(jié)的墊片,來保證tag結(jié)構(gòu)體內(nèi)被系統(tǒng)更好的接受.

默認(rèn)情況下編譯器會自動找出最大的變量值double dDouble使用它的字節(jié)長度來充當(dāng)數(shù)據(jù)塊對齊尺寸,例如上方代碼中最大值是double 8字節(jié),那么相應(yīng)的對齊尺寸就應(yīng)該是8字節(jié),不足8字節(jié)的變量編譯器會自動補(bǔ)充墊片字節(jié),當(dāng)然我們也可以通過預(yù)編譯指令#pragma pack(N)來手動調(diào)整對齊大小.

定義結(jié)構(gòu)體成員: 首先定義Student結(jié)構(gòu),然后動態(tài)的賦值,觀察其參數(shù)的變換.

需要注意的是,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量是不同的概念,通常結(jié)構(gòu)體類型的定義并不會分配空間,只有結(jié)構(gòu)體變量被賦值后編譯器才會在編譯時(shí)對其進(jìn)行處理,結(jié)構(gòu)體類型與結(jié)構(gòu)體變量,其在內(nèi)存中的表現(xiàn)形式都是普通變量,而結(jié)構(gòu)則是編譯器對語法進(jìn)行的一種處理,編譯時(shí)會將其轉(zhuǎn)為普通的變量來對待.

#include <stdio.h>struct Student {long int number;char name[20];char sex; };int main(int argc, char* argv[]) {struct Student num1;scanf("%d", &num1.number);scanf("%s", &num1.name);scanf("%c", &num1.sex);printf("編號: %d 姓名: %s 性別: %c", num1.number, num1.name, num1.sex);return 0; }

為了驗(yàn)證上面的猜測,我們將其反匯編,觀察代碼會發(fā)現(xiàn)結(jié)構(gòu)體之間的變化,通過0x20-0x1c可得到第一個(gè)結(jié)構(gòu)的大小,同理0x1c-0x08得到的則是第二個(gè)結(jié)構(gòu)以此類推,就可推測出部分結(jié)構(gòu)成員的類型.

004113E0 | 8D45 E0 | lea eax,dword ptr ss:[ebp-0x20] | 第一個(gè)結(jié)構(gòu) 004113E3 | 50 | push eax | 004113E4 | 68 58584100 | push consoleapplication1.415858 | 415858:"%d" 004113E9 | FF15 10914100 | call dword ptr ds:[<&scanf>] | 004113EF | 83C4 08 | add esp,0x8 | 004113F2 | 3BF4 | cmp esi,esp | 004113F4 | E8 42FDFFFF | call 0x41113B | 004113F9 | 8BF4 | mov esi,esp | main.c:14 004113FB | 8D45 E4 | lea eax,dword ptr ss:[ebp-0x1C] | 第二個(gè)結(jié)構(gòu) 004113FE | 50 | push eax | 004113FF | 68 5C584100 | push consoleapplication1.41585C | 41585C:"%s"==L"猥" 00411404 | FF15 10914100 | call dword ptr ds:[<&scanf>] | 0041140A | 83C4 08 | add esp,0x8 | 0041140D | 3BF4 | cmp esi,esp | 0041140F | E8 27FDFFFF | call 0x41113B | 00411414 | 8BF4 | mov esi,esp | main.c:15 00411416 | 8D45 F8 | lea eax,dword ptr ss:[ebp-0x8] | 第三個(gè)結(jié)構(gòu) 00411419 | 50 | push eax | 0041141A | 68 60584100 | push consoleapplication1.415860 | 415860:"%c"==L"揮" 0041141F | FF15 10914100 | call dword ptr ds:[<&scanf>] | 00411425 | 83C4 08 | add esp,0x8 |

定義結(jié)構(gòu)體數(shù)組: 結(jié)構(gòu)體數(shù)組中每個(gè)數(shù)組元素都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù),他們都分別包括各個(gè)成員項(xiàng).

#include <stdio.h> #include <string.h>struct Student {char name[20];int count; };int main(int argc, char* argv[]) {int x, y;char leader_name[20];struct Student leader[3] = { "admin", 0, "lyshark", 0, "guest", 0 };for (x = 0; x <= 10; x++){scanf("%s", leader_name);for (y = 0; y < 3; y++){if (strcmp(leader_name, leader[y].name) == 0)leader[y].count++;}}for (int z = 0; z < 3; z++){printf("用戶名: %5s 出現(xiàn)次數(shù): %d\n", leader[z].name, leader[z].count);}system("pause");return 0; }

逆向上方這段代碼,我們主要觀察它的尋址方式,你會發(fā)現(xiàn)其本質(zhì)上就是數(shù)組尋址,并沒有任何的特別的.

004114F9 | 83BD 74FFFFFF 03 | cmp dword ptr ss:[ebp-0x8C],0x3 | 指定循環(huán)次數(shù) 3 00411500 | 7D 31 | jge 0x411533 | 00411502 | 6B85 74FFFFFF 18 | imul eax,dword ptr ss:[ebp-0x8C],0x18 | 每次遞增0x18 => char name[20] + int count = 24 00411509 | 8BF4 | mov esi,esp | 0041150B | 8B4C05 C8 | mov ecx,dword ptr ss:[ebp+eax-0x38] | 找到 count 0041150F | 51 | push ecx | ecx:"guest" 00411510 | 6B95 74FFFFFF 18 | imul edx,dword ptr ss:[ebp-0x8C],0x18 | 00411517 | 8D4415 B4 | lea eax,dword ptr ss:[ebp+edx-0x4C] | 找到 name[20] 0041151B | 50 | push eax | 0041151C | 68 78584100 | push consoleapplication1.415878 | 415878:"用戶名: %5s 出現(xiàn)次數(shù): %d\n" 00411521 | FF15 20914100 | call dword ptr ds:[<&printf>] | 00411527 | 83C4 0C | add esp,0xC |

指向結(jié)構(gòu)體數(shù)組的指針: 結(jié)構(gòu)體指針就是指向結(jié)構(gòu)體變量的指針,結(jié)構(gòu)體變量的前4字節(jié)就是該結(jié)構(gòu)體的指針,將該指針存放到一個(gè)指針變量中,那么這個(gè)指針變量就可以叫做結(jié)構(gòu)指針變量,結(jié)構(gòu)體指針定義如下.

#include <stdio.h> #include <string.h>struct Student {int number;char name[20]; };struct Student stu[3] = { { 1, "admin" }, { 2, "lyshark" }, { 3, "guest" } };int main(int argc, char* argv[]) {struct Student *structPTR;for (structPTR = stu; structPTR < stu + 3; structPTR++){printf("編號: %d 名字: %s \n", (*structPTR).number, structPTR->name);}system("pause");return 0; }

觀察以下這段反匯編代碼,你會發(fā)現(xiàn)其實(shí)和前面的指針數(shù)組尋址一個(gè)道理,并沒有什么野路子.

004113DE | C745 F8 00804100 | mov dword ptr ss:[ebp-0x8],0x418000 | 此處獲取結(jié)構(gòu)體指針 => structPTR = stu 004113E5 | EB 09 | jmp 0x4113F0 | 004113E7 | 8B45 F8 | mov eax,dword ptr ss:[ebp-0x8] | [ebp-8]:_stu 004113EA | 83C0 18 | add eax,0x18 | 遞增 structPTR++ 每次遞增一個(gè)結(jié)構(gòu) 004113ED | 8945 F8 | mov dword ptr ss:[ebp-0x8],eax | 將遞增后的指針回寫 004113F0 | 817D F8 48804100 | cmp dword ptr ss:[ebp-0x8],0x418048 | 對比指正是否結(jié)束 004113F7 | 73 26 | jae 0x41141F | 004113F9 | 8B45 F8 | mov eax,dword ptr ss:[ebp-0x8] | main.c:18, [ebp-8]:_stu 004113FC | 83C0 04 | add eax,0x4 | eax:"admin" 004113FF | 8BF4 | mov esi,esp | 00411401 | 50 | push eax | 將 structPTR->name 壓棧 00411402 | 8B4D F8 | mov ecx,dword ptr ss:[ebp-0x8] | [ebp-8]:_stu 00411405 | 8B11 | mov edx,dword ptr ds:[ecx] | 取出計(jì)數(shù)地址 00411407 | 52 | push edx | 00411408 | 68 58584100 | push consoleapplication1.415858 | 415858:"編號: %d 名字: %s \n" 0041140D | FF15 18914100 | call dword ptr ds:[<&printf>] | 輸出結(jié)果 00411413 | 83C4 0C | add esp,0xC |

向函數(shù)內(nèi)傳遞結(jié)構(gòu)體: 將函數(shù)的形參列表定義為結(jié)構(gòu)體參數(shù),該函數(shù)就可以接收一個(gè)結(jié)構(gòu)體列表了,收到列表后我們可以取出里面的最大值并返回.

#include <stdio.h> #include <string.h>struct Student {int number;char name[20];float aver; };struct Student stud[3] = { { 1, "admin" ,89}, { 2, "lyshark" ,76}, { 3, "guest",98 }};int GetMaxID(struct Student stu[]) {int x , item = 0;for (x = 0; x < 3; x++){if (stu[x].aver > stu[item].aver)item = x;}return stu[item].number; }int main(int argc, char* argv[]) {int item;item = GetMaxID(stud);printf("成績最高的學(xué)生編號: %d", item);system("pause");return 0; }

這里不啰嗦,直接看反匯編代碼能發(fā)現(xiàn)在主函數(shù)調(diào)用call 0x4110e6之前是將push <console._stud>結(jié)構(gòu)體的首地址傳入了函數(shù)內(nèi)部執(zhí)行的.

0041146C | 8DBD 34FFFFFF | lea edi,dword ptr ss:[ebp-0xCC] | 00411472 | B9 33000000 | mov ecx,0x33 | 33:'3' 00411477 | B8 CCCCCCCC | mov eax,0xCCCCCCCC | 0041147C | F3:AB | rep stosd | 0041147E | 68 00804100 | push <console._stud> | 將結(jié)構(gòu)體首地址傳遞到call內(nèi)部 00411483 | E8 5EFCFFFF | call 0x4110E6 | 00411488 | 83C4 04 | add esp,0x4 |

最后一段C代碼是實(shí)現(xiàn)了返回結(jié)構(gòu)體的結(jié)構(gòu),就是說將處理好的結(jié)構(gòu)體返回給上層調(diào)用,其原理也是利用了指針,這里只把代碼放出來,自己分析一下吧.

#include <stdio.h>struct tag{int x;int y;char z; };tag RetStruct() {tag temp;temp.x = 10;temp.y = 20;temp.z = 'A';return temp; }int main(int argc, char* argv[]) {tag temp;temp = RetStruct();printf("%d \n",temp.x);printf("%d \n",temp.y);printf("%d \n",temp.z);return 0; }

定義并使用共用體類型: 有時(shí)候我們想要使用同一段內(nèi)存數(shù)據(jù)來表示不同的數(shù)據(jù)類型,那么我們就可以使用共用體類型.

結(jié)構(gòu)體與共用體的定義形式相似,但他們的含義完全不同,結(jié)構(gòu)體變量所占用的內(nèi)存長度是各成員占的內(nèi)存長度之和,每個(gè)成員分別占有其自己的內(nèi)存單元,而共用體變量所占用的內(nèi)存長度則等于共用體中的最長的成員的長度,首先我們先來研究C代碼.

#include <stdio.h>union Date {int num;char ch;float f; }dat;int main(int argc, char* argv[]) {dat.num = 97;printf("以整數(shù)形式輸出: %d\n", dat.num);printf("以字符形式輸出: %c\n", dat.ch);printf("以浮點(diǎn)數(shù)形式輸出: %f\n", dat.f);system("pause");return 0; }

以上代碼我們通過dat.num = 97;給共用體賦予了整數(shù)類型的初始值,后面則是按照不同的形式輸出這段內(nèi)存,其反匯編代碼如下,觀察代碼可發(fā)現(xiàn)共用體僅僅儲存一份變量數(shù)據(jù)在程序的常量區(qū),當(dāng)我們調(diào)用不同類型的共用體是則進(jìn)行相應(yīng)的轉(zhuǎn)換,其實(shí)這些都是編譯器為我們做的,本質(zhì)上共用體其實(shí)也是一個(gè)個(gè)普通的變量.

004113DE | C705 48854100 61000000 | mov dword ptr ds:[<_dat>],0x61 | main.c:12, 00418548:L"a", 61:'a' 004113E8 | 8BF4 | mov esi,esp | main.c:13 004113EA | A1 48854100 | mov eax,dword ptr ds:[<_dat>] | 使用整數(shù)方式輸出 004113EF | 50 | push eax | 004113F0 | 68 58584100 | push consoleapplication1.415858 | 415858:"以整數(shù)形式輸出: %d\n" 004113F5 | FF15 18914100 | call dword ptr ds:[<&printf>] | 004113FB | 83C4 08 | add esp,0x8 | 004113FE | 3BF4 | cmp esi,esp | 00411400 | E8 36FDFFFF | call 0x41113B | 00411405 | 0FBE05 48854100 | movsx eax,byte ptr ds:[<_dat>] | 輸出字符 0041140C | 8BF4 | mov esi,esp | 0041140E | 50 | push eax | 0041140F | 68 70584100 | push consoleapplication1.415870 | 415870:"以字符形式輸出: %c\n" 00411414 | FF15 18914100 | call dword ptr ds:[<&printf>] | 0041141A | 83C4 08 | add esp,0x8 | 0041141D | 3BF4 | cmp esi,esp | 0041141F | E8 17FDFFFF | call 0x41113B | 00411424 | F3:0F5A05 48854100 | cvtss2sd xmm0,dword ptr ds:[<_dat>] | 輸出浮點(diǎn)數(shù) 0041142C | 8BF4 | mov esi,esp | 0041142E | 83EC 08 | sub esp,0x8 | 00411431 | F2:0F110424 | movsd qword ptr ss:[esp],xmm0 | 00411436 | 68 88584100 | push consoleapplication1.415888 | 415888:"以浮點(diǎn)數(shù)形式輸出: %f\n" 0041143B | FF15 18914100 | call dword ptr ds:[<&printf>] | 00411441 | 83C4 0C | add esp,0xC |

既然了解了共用體的結(jié)構(gòu)類型,那不妨編譯以下代碼然后逆向分析它的尋址方式,觀察與數(shù)組指針是否一致呢?

#include <stdio.h>struct {char job; // s=學(xué)生 t=老師union{int clas; // 學(xué)生學(xué)號char position[20]; // 老師職務(wù)}category; }person[2];int main(int argc, char* argv[]) {for (int x = 0; x < 2; x++){scanf("%c", &person[x].job); // 輸入人物類型if (person[x].job == 't'){scanf("%s", &person[x].category.position); // 如果是老師則輸入職務(wù)}else if (person[x].job == 's'){scanf("%d", &person[x].category.clas); // 如果是學(xué)生則輸入學(xué)號}}for (int y = 0; y < 2; y++){if (person[y].job == 's')printf("學(xué)生學(xué)號: %d\n", person[y].category.clas);else if (person[y].job == 't')printf("老師職務(wù): %s\n", person[y].category.position);}system("pause");return 0; }

定義并使用枚舉類型: 如果一個(gè)變量只有幾種可能,那么我們就可以定義一個(gè)枚舉字典,通過循環(huán)的方式枚舉元素,編譯以下代碼觀察變化,其中的枚舉{red,yellow,blue,white,black}會被編譯器在編譯時(shí)替換為{0,1,2,3,4}等數(shù)字,所以反匯編以下代碼你回范縣并沒有出現(xiàn)字符串,而是使用數(shù)字來代替了.

#include <stdio.h>int main(int argc, char* argv[]) {enum Color {red,yellow,blue,white,black};enum Color x;for (x = red; x <= black; x++){printf("元素值: %d\n",x);switch (x){case red: printf("red 出現(xiàn)了\n"); break;case blue: printf("blue 出現(xiàn)了\n"); break;}}system("pause");return 0; }

至此,我們的C語言反匯編的內(nèi)容就結(jié)束了,接下來我們將領(lǐng)略C++ 的反匯編技巧,C++ 是重頭戲,其中的類,構(gòu)造析構(gòu)函數(shù),等都是重點(diǎn),不過C++ 在識別上其實(shí)更加的容易,因?yàn)槠浞庋b的更加徹底,對C語言的封裝。

總結(jié)

以上是生活随笔為你收集整理的C语言反汇编 - 函数与结构体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国产视频在线观看一区 | 丁香婷婷综合五月 | av电影免费看| 成人sm另类专区 | 天天色棕合合合合合合 | 久久婷婷国产色一区二区三区 | www激情久久 | 人人爱人人添 | 色婷婷综合久久久中文字幕 | 国产中文字幕网 | 婷婷久操| 69xx视频 | 91网在线观看 | 色网站在线 | 成人av高清在线观看 | 91视频在线观看免费 | 天天插日日插 | 在线看免费 | 国产免费又黄又爽 | 在线观看成人毛片 | 9免费视频 | 玖玖玖影院 | 国产一区二区在线精品 | 福利一区在线 | 91免费网 | www.色午夜.com | 国产精品扒开做爽爽的视频 | 欧美色伊人 | 亚洲理论在线观看电影 | 天天艹天天干天天 | 中文久久精品 | 亚洲电影影音先锋 | 91视频国产高清 | 99国产免费网址 | 久久97久久 | 国产高清精 | 亚洲精品免费在线观看视频 | 日韩在线高清免费视频 | 国产精品一区二区三区在线播放 | 日韩极品在线 | av+在线播放在线播放 | 91精品视频一区二区三区 | 18岁免费看片 | 99中文视频在线 | 国产精品一区二区在线免费观看 | 91视频在线看 | 国产 日韩 在线 亚洲 字幕 中文 | 国产黄在线播放 | 中文字幕精品一区二区三区电影 | 黄色大片日本 | 日韩免费中文 | www91在线观看 | 91视频在线观看大全 | 天堂av观看 | 波多野结衣一区二区三区中文字幕 | 欧美成人91| 国产精品精品国产色婷婷 | 欧美日韩大片在线观看 | 国产精品a久久久久 | 久久首页 | 亚洲精品成人网 | 欧美激情va永久在线播放 | 国产精品资源在线 | 国产 av 日韩 | 日本视频久久久 | 午夜久久影视 | 午夜精品久久久久久99热明星 | 国产色资源 | 久草在线在线视频 | 在线观看 亚洲 | 久久er99热精品一区二区 | 黄色片免费看 | 国产精品自在线 | www.99久久.com| 五月婷香| 久一网站| 成年人黄色av | 最新国产精品亚洲 | 成年人在线视频观看 | 伊人小视频| 成人三级视频 | 欧美作爱视频 | 高清不卡一区二区在线 | 狠狠色噜噜狠狠 | 国产免费观看视频 | 高清av在线免费观看 | 又黄又刺激的视频 | 日批网站免费观看 | 青草视频在线播放 | 国产中文字幕三区 | 超碰在线个人 | 99国内精品久久久久久久 | 国产成人av免费在线观看 | 日本爱爱免费视频 | 久久人人艹 | 国产精品女同一区二区三区久久夜 | 西西www444| 天天操天天干天天玩 | 91免费在线 | 九草在线视频 | 欧美日韩国语 | 国产视频一区二区在线播放 | 色狠狠久久av五月综合 | 中文字幕观看av | 国产成人精品999 | 国产精品区二区三区日本 | 久久一区二区三区四区 | 成人黄视频 | 亚洲视频综合在线 | 久久精品免费看 | 久久久精华网 | 色播亚洲婷婷 | 狠狠插天天干 | 国产伦理精品一区二区 | 日本黄色免费电影网站 | 亚洲九九| 国产精品一二三 | 超碰97中文 | www..com毛片| 在线观看成人毛片 | 精品国产一区二区三区男人吃奶 | 黄色成人免费电影 | 在线精品视频在线观看高清 | 午夜精品99久久免费 | 日日射天天射 | 亚洲视频网站在线观看 | www久久国产 | 久久国产免费视频 | 国产黄色成人av | av黄色亚洲| 国产精品 国内视频 | 免费 在线 中文 日本 | 婷婷六月色 | 五月婷婷在线视频观看 | 99精品久久只有精品 | 亚洲另类视频在线观看 | 丝袜足交在线 | 日韩在线一区二区免费 | 天天射射天天 | 国产三级精品三级在线观看 | 97视频在线观看免费 | 欧美一区二区三区在线观看 | 午夜在线免费视频 | 久久黄色免费观看 | 国产午夜在线观看 | 麻豆成人在线观看 | 天堂av官网 | 欧美一级久久久 | 日日夜夜精品免费 | 99精品国产一区二区三区不卡 | 日韩一二三| 国产三级久久久 | 超碰97在线资源 | 天堂av免费 | 欧美日韩精品综合 | 中文字幕第一页在线播放 | 伊色综合久久之综合久久 | 综合色站 | 99久久99久久精品国产片 | 欧美精品一区二区性色 | www.啪啪.com | 在线播放国产精品 | 色吊丝在线永久观看最新版本 | 国产尤物在线 | 91在线网站 | 中文字幕av免费在线观看 | 欧美午夜a | 色婷婷亚洲婷婷 | 91丨九色丨91啦蝌蚪老版 | 日本三级久久 | 亚洲,播放| 视频福利在线 | 91av官网| 日韩免费电影在线观看 | 免费在线观看黄网站 | 婷婷在线不卡 | 婷婷五月色综合 | 国产视频欧美视频 | 国产亚洲欧美在线视频 | 99精品免费观看 | 蜜桃麻豆www久久囤产精品 | 亚洲最大在线视频 | 久久这里只有精品视频首页 | 99精品视频免费在线观看 | 色九色 | www.久久成人 | 永久免费毛片 | 一区二区丝袜 | 久久精品中文字幕免费mv | 久草在线免费电影 | 中文字幕欧美日韩va免费视频 | 伊人va| 91桃色在线免费观看 | 中文字幕av电影下载 | 日韩中文字幕免费在线观看 | 久久久久久国产精品 | 中文字幕亚洲字幕 | 波多野结衣资源 | 一区二区伦理电影 | 日韩欧在线 | 91日韩精品视频 | 国产精品中文字幕在线观看 | 亚洲精品中文字幕在线观看 | 亚洲精品理论片 | 99热国产在线观看 | 日b视频国产 | 日韩特级片 | 久久午夜色播影院免费高清 | 蜜桃视频精品 | 91视频在线国产 | 少妇高潮流白浆在线观看 | 中文字幕 在线看 | 在线观看日韩一区 | 国产中文字幕在线免费观看 | 久久久免费网站 | 在线观看韩国av | 在线性视频日韩欧美 | 免费看久久 | 91精品视屏 | 日日夜夜精品网站 | 精品视频在线视频 | 91精品影视| 狠狠色丁香婷婷综合久久片 | 黄色在线免费观看网站 | 国产一级精品视频 | 444av| 欧美日产在线观看 | 91精品一区国产高清在线gif | 久久久美女 | 18做爰免费视频网站 | 久久免费精品 | 亚洲理论电影网 | 久热免费在线 | 久久国产一区二区 | 精品国产乱码 | 久久国产影院 | 国产精品免费av | 最新精品视频在线 | 丁香婷婷电影 | 玖草在线观看 | www.久久91 | 久久96国产精品久久99漫画 | 欧美在线资源 | 亚洲男女精品 | 一区二区视频免费在线观看 | 日韩av手机在线观看 | 国内揄拍国内精品 | 97免费在线观看 | 免费看的国产视频网站 | 91av网址 | 中文在线a天堂 | 国产精品成人在线 | 九九热精品视频在线观看 | 成人免费观看大片 | 久久欧美在线电影 | www久久| 最近免费观看的电影完整版 | 中文字幕在线国产 | 欧美日韩国产免费视频 | 欧美最新大片在线看 | 69夜色精品国产69乱 | 亚洲成人av片 | 久久久久久激情 | 在线亚洲免费视频 | 久久99精品国产91久久来源 | 国产成人三级在线播放 | 97超碰福利久久精品 | 久久一久久 | 天堂在线视频中文网 | 亚洲一区网站 | 九九亚洲视频 | 欧美三人交 | 国产成人久久av免费高清密臂 | 人人狠| 成人黄色免费观看 | 99re亚洲国产精品 | 激情小说 五月 | 香蕉视频久久久 | 色婷婷中文| 中文字幕在线有码 | 中文字幕a∨在线乱码免费看 | www免费网站在线观看 | 午夜av大片 | 亚洲精品小视频 | 激情综合一区 | 91精品视频免费在线观看 | 免费av网址在线观看 | 日韩黄色在线电影 | 国产精品成人久久 | 久久国产系列 | 成 人 黄 色 视频播放1 | 精品久久一二三区 | 久久涩涩网站 | 日韩精品免费 | 伊人成人激情 | 亚州精品一二三区 | 美女性爽视频国产免费app | 国产精品久久久久毛片大屁完整版 | 国产精品精品国产色婷婷 | 国产91学生粉嫩喷水 | 国产成人99av超碰超爽 | 欧美一级电影在线观看 | 四虎永久视频 | 国产在线欧美日韩 | 欧美日性视频 | 麻豆精品在线 | 69夜色精品国产69乱 | 中文在线免费看视频 | 国产系列精品av | 久久黄色小说视频 | 狠狠躁日日躁狂躁夜夜躁av | 国产精品福利午夜在线观看 | 亚洲最新合集 | 亚洲精品18日本一区app | 国产特级毛片 | 一级免费黄视频 | 国产一级性生活视频 | av一区二区三区在线观看 | 国产无区一区二区三麻豆 | 中文字幕 国产精品 | 久久艹国产 | 精品国产免费一区二区三区五区 | 欧美三级高清 | 亚洲视频每日更新 | 91精品国产综合久久福利 | 国产午夜精品视频 | www.91国产 | 在线观看视频h | 国产亚洲欧美在线视频 | 骄小bbw搡bbbb揉bbbb | 亚洲精品乱码久久久久久久久久 | 丁香 婷婷 激情 | 国产精品久久久久久久久久久久午夜片 | 久久96国产精品久久99软件 | 国产精品一区二区久久国产 | 一区 二区 精品 | 色偷偷人人澡久久超碰69 | 国产v视频 | 色综合天天天天做夜夜夜夜做 | 97色资源| 在线观看深夜视频 | 中文字幕 成人 | 久久国产露脸精品国产 | 国产美女免费 | www久久九| 韩国av一区 | 久久精品国产亚洲精品2020 | 国产视频一区二区在线观看 | 国产午夜精品久久久久久久久久 | 国产麻豆传媒 | 国产91在线 | 美洲 | 日韩欧美在线观看 | 国产欧美最新羞羞视频在线观看 | 五月婷婷深开心 | 99视频在线观看视频 | 国产精品一区二区av影院萌芽 | 天天操导航 | 在线观看黄色小视频 | 国产 日韩 欧美 中文 在线播放 | 国产精品久久久久久吹潮天美传媒 | 成人动漫一区二区三区 | 久久看视频 | 成人黄色资源 | 日韩av资源在线观看 | 国产成人精品一区二区三区网站观看 | 国产另类av | 狠狠狠色丁香婷婷综合久久五月 | 日韩精品一区二区不卡 | 9999精品视频 | 国产午夜av | 99精品免费网 | 四虎国产永久在线精品 | 欧美另类v| 成年人电影免费看 | 天天天天射 | 99在线视频免费观看 | 国产成人精品在线播放 | av黄免费看 | 国产a级片免费观看 | 欧美午夜精品久久久久久浪潮 | 久久色中文字幕 | 国产福利小视频在线 | 亚洲一二三区精品 | 欧美一级久久 | 欧美精品久久99 | 精品福利在线视频 | 国产无区一区二区三麻豆 | 久久久天堂 | 超碰人人超 | 日日日视频 | 在线色亚洲 | 中文字幕在线有码 | 91成人精品国产刺激国语对白 | 蜜桃麻豆www久久囤产精品 | 日韩高清三区 | 肉色欧美久久久久久久免费看 | 96超碰在线 | 久久久国产精品成人免费 | 色妞色视频一区二区三区四区 | 免费在线观看成年人视频 | 五月婷婷av| 欧美韩日精品 | 视频一区在线免费观看 | 人人看97| 欧美激情视频一区二区三区 | 久久久久久久久久久精 | 成人一区二区在线 | 中文字幕观看视频 | 国产日韩欧美在线免费观看 | 国产在线欧美日韩 | 国产美女网站在线观看 | 久久久毛片 | 久久激情视频 久久 | 国产精彩视频一区二区 | 国产特级毛片aaaaaa | 日韩免费一区二区在线观看 | 色国产精品一区在线观看 | 激情深爱| 中文字幕丝袜 | 91精品免费在线视频 | 国产黄大片 | 狠狠狠狠狠狠狠 | 中文字幕在线看片 | 日韩另类在线 | 一区二区三区中文字幕在线 | 91高清一区 | 一级黄色在线视频 | 亚洲人片在线观看 | 波多野结衣一区 | 欧美午夜理伦三级在线观看 | 亚洲精品视频一 | 国产精品亚洲片在线播放 | 毛片播放网站 | 天天干,天天射,天天操,天天摸 | 99久久夜色精品国产亚洲96 | 成人午夜剧场在线观看 | 3d黄动漫免费看 | 天天碰天天操视频 | 久草爱视频 | a久久久久久 | 欧美精品视 | www.国产在线 | 国产91亚洲精品 | av网站免费在线 | 久久久99精品免费观看 | zzijzzij亚洲成熟少妇 | 在线成人一区 | 久久国语露脸国产精品电影 | 在线导航av | 狠狠激情中文字幕 | 99re国产| 日韩精品免费在线 | 久久九九九九 | 成人在线视频免费 | 欧美激情va永久在线播放 | 亚洲美女免费精品视频在线观看 | www.看片网站 | 西西444www| 在线日韩一区 | 久久不卡国产精品一区二区 | 激情伊人五月天久久综合 | 在线观看成人福利 | 精品在线观看免费 | 在线观看中文字幕亚洲 | 日韩r级电影在线观看 | 在线观看视频一区二区三区 | 欧美激情第八页 | 亚洲六月丁香色婷婷综合久久 | 国产小视频91 | 丁香激情综合久久伊人久久 | 人人操日日干 | 在线av资源| 玖玖玖在线 | 又黄又爽又湿又无遮挡的在线视频 | a级成人毛片| 日韩视频一 | 精品在线亚洲视频 | 综合激情av | 亚洲欧美一区二区三区孕妇写真 | 精品国产一区二区三区在线 | 亚洲一区二区三区毛片 | 成人性生交大片免费看中文网站 | 四虎最新域名 | 成人黄大片 | 精品av在线播放 | 男女全黄一级一级高潮免费看 | 91高清免费 | 在线观看黄色的网站 | 美女网站视频久久 | 超碰国产在线播放 | 日韩欧美国产成人 | 国精产品999国精产品岳 | 精品在线观看一区二区三区 | 超碰免费公开 | 国产精品久久久久三级 | 国产无套视频 | 五月婷久久 | 最近中文字幕完整高清 | 91经典在线 | 亚洲国产精品va在线看 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品国产午夜 | 成人av在线网| 国产成人久久av免费高清密臂 | 天天插天天射 | 婷婷香蕉 | 高清精品久久 | 国产精品久久久久久久久久久免费 | 91爱在线 | 国产又粗又猛又爽又黄的视频免费 | 亚洲伦理电影在线 | 超碰在线人人 | 五月婷婷综合久久 | 欧美日韩在线视频一区 | 亚洲精品久久久久www | 中文字幕在线看视频国产中文版 | 黄色网www| 日日成人网 | 中日韩三级视频 | 天天超碰 | 一级片免费在线 | 激情久久一区二区三区 | 91看片一区二区三区 | 91精品视频免费 | 99成人免费视频 | 欧美日韩在线观看一区二区 | 中文字幕免费高清 | 亚洲五月 | 国产97色| 在线超碰av | 免费成人在线电影 | 天天干天天看 | 亚洲精品一区二区在线观看 | 国产 日韩 欧美 中文 在线播放 | 天天爽天天碰狠狠添 | 久久久免费精品国产一区二区 | 中文字幕在线观看第二页 | 91九色精品女同系列 | 精品国产电影一区 | 亚洲麻豆精品 | 色爱区综合激月婷婷 | 欧美色伊人 | 免费在线观看日韩视频 | 天堂网中文在线 | 天天操天天色综合 | 99久久精品日本一区二区免费 | 最近高清中文在线字幕在线观看 | 天天色天天艹 | 国产精品毛片久久久 | 一级成人在线 | www.日本色 | 日韩高清在线不卡 | 欧美日韩在线观看一区二区三区 | 97精品国产 | 超碰av在线播放 | 日韩免费电影一区二区 | 久久久久网站 | 福利av影院 | 久久午夜国产精品 | 色亚洲激情 | 日韩欧美大片免费观看 | 久久99国产精品自在自在app | 又黄又爽又刺激 | h动漫中文字幕 | 美女网站在线免费观看 | 久久精品123 | 狠狠狠狠狠狠 | 婷婷看片| 91精品国产入口 | 久久丁香 | 亚洲精品中文字幕视频 | 中文亚洲欧美日韩 | 不卡精品| av一级久久| 精品国产一二三 | 亚洲人成人天堂h久久 | 中文字幕二区三区 | 伊人婷婷| 五月婷影院 | 婷婷色 亚洲| 精品久久久网 | 91手机电影 | 最新av网站在线观看 | 国产不卡免费 | 中文字幕资源站 | 狠狠操.com | 免费视频 你懂的 | 精品国产_亚洲人成在线 | 在线观看国产高清视频 | 久久国产成人午夜av影院宅 | 欧美一区二区三区激情视频 | 亚洲精品伦理在线 | 精品国产精品久久一区免费式 | 亚洲精品美女视频 | 国产一级一级国产 | 久久免费高清 | 日本久久视频 | 欧美精品一区在线 | 天天人人 | 91精品国产麻豆国产自产影视 | av电影中文字幕 | 亚洲一区免费在线 | 中文字幕在线成人 | 久精品视频 | 色噜噜噜噜 | 国产精品久久久久久久午夜 | 一区二区三区av在线 | 久久人人97超碰com | 亚洲春色奇米影视 | 久久久免费看 | 欧美一区二区三区在线播放 | 在线免费观看一区二区三区 | 国产伦精品一区二区三区四区视频 | 欧美日韩国产一区二区三区在线观看 | 夜色资源站wwwcom | 97超碰在线免费观看 | 亚洲最大av在线播放 | 狠狠躁18三区二区一区ai明星 | 国内精品久久久久影院日本资源 | 亚洲天天看 | 亚洲精品xxxx| 五月婷婷在线视频 | 婷香五月 | 日韩在线| 丝袜美腿亚洲综合 | av短片在线观看 | 精品一区 在线 | 色偷偷人人澡久久超碰69 | 99久久综合国产精品二区 | 免费观看日韩av | 日日爽天天 | 天天综合成人网 | 在线国产99 | 欧美成人一区二区 | 欧美日韩伦理在线 | 一级a毛片高清视频 | av在观看| 日韩午夜一级片 | www.大网伊人| 欧美激情在线看 | 久久综合久久伊人 | av激情五月| 五月天婷婷丁香花 | 91一区二区三区久久久久国产乱 | 久草网在线观看 | 国产一级特黄电影 | 久草网站在线观看 | 一级黄色片网站 | 91c网站色版视频 | 349k.cc看片app| 男女视频91 | 91日韩精品视频 | 亚洲国产精品500在线观看 | 超碰在线成人 | 久操97 | 国产精品国产三级国产aⅴ无密码 | 久久精品99久久久久久2456 | 青青视频一区 | 精品播放 | 胖bbbb搡bbbb擦bbbb | 热久久影视 | 欧美资源在线观看 | 西西44人体做爰大胆视频 | 国产视频在线一区二区 | 婷婷狠狠操 | 亚洲精品在线观看网站 | 国产精品久久av | 久久久国产精品一区二区三区 | 欧美日韩高清一区二区三区 | 黄色小说网站在线 | 99爱这里只有精品 | 99中文视频在线 | 四虎影视精品永久在线观看 | 国产首页| 国产成人精品一区二区在线观看 | 五月婷婷色播 | 日韩免费电影在线观看 | 一级片视频在线 | 天天草天天色 | 欧美日韩成人一区 | 久热超碰 | 波多野结依在线观看 | 亚洲国产欧美在线人成大黄瓜 | 亚洲精品在线一区二区三区 | 在线免费观看黄色 | 久久国产精彩视频 | 欧美日韩精品在线视频 | 精品国产一区二区三区久久久蜜臀 | 97精品视频在线播放 | 国产精品中文字幕在线 | 亚洲人人射 | 四虎精品成人免费网站 | 中文字幕 国产 一区 | 久久一区精品 | 最近日本mv字幕免费观看 | 特级a毛片 | 精品视频| 2024av| 久久精品视频在线观看 | 久久久夜色 | 午夜精品一区二区三区免费 | 天天玩夜夜操 | 成人亚洲精品久久久久 | 成人av电影网址 | 亚洲激情视频在线观看 | 干干干操操操 | 国产亚洲精品久久久久久久久久久久 | av线上看| 成人在线播放视频 | 国产精品精品国产婷婷这里av | 91探花国产综合在线精品 | 日韩欧美在线免费 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 91精品久久久久久久久久久久久 | 亚洲精品影视在线观看 | 色综合久久88色综合天天人守婷 | 99精品视频免费看 | 久久美女免费视频 | 高清免费av在线 | 亚洲视频1| 国产成人精品一区在线 | 国产精品一区二区久久精品爱涩 | 精品国产美女 | 18+视频网站链接 | 久久国产精品99久久久久久丝袜 | 久久99热久久99精品 | 日日天天干 | 人人揉人人揉人人揉人人揉97 | 狠狠操.com | 色姑娘综合天天 | 三级黄色大片在线观看 | 国产精品美女久久 | 97在线免费视频 | 缴情综合网五月天 | 五月天中文字幕mv在线 | 天天艹天天 | 在线黄色免费av | 天天干人人插 | 亚洲精品国产综合久久 | 久久男人影院 | 美女网站黄在线观看 | 国产不卡一二三区 | 亚洲欧美国产日韩在线观看 | 亚洲国产小视频在线观看 | 天天操网址 | 久久久久亚洲国产精品 | 国产色婷婷在线 | 91热爆视频| 欧美日韩在线第一页 | 99国产免费网址 | 日韩艹| 国产精品一区在线观看 | 色婷婷综合久久久久中文字幕1 | 亚洲在线黄色 | 免费久久99精品国产婷婷六月 | 午夜电影久久久 | 中文字幕2021 | 中文字幕在线专区 | 成人黄色大片 | 日韩黄色大片在线观看 | 日本性久久 | 狠狠撸电影 | 亚洲一区动漫 | 最近日本中文字幕a | 成人观看视频 | 激情综合交 | 久艹在线播放 | 黄色软件在线观看免费 | 97超碰福利久久精品 | 日韩一二区在线观看 | 2022中文字幕在线观看 | 中文字幕在线免费播放 | 国产一区二区在线免费视频 | 中文字幕888 | 手机av在线不卡 | 久久爱资源网 | 欧美在线视频一区二区三区 | 99久久99久久精品国产片 | 中文字幕在线观看视频一区二区三区 | 国产精品免费观看在线 | 正在播放国产精品 | 亚洲第一中文字幕 | 超碰人人做 | av成人在线观看 | 日韩有码中文字幕在线 | 久久久免费视频播放 | av 在线观看 | 国产精品高潮呻吟久久av无 | 久久国产精品一区二区三区四区 | 久久网站免费 | 日韩亚洲在线观看 | 99精品视频一区二区 | 精品国产1区 | 国产流白浆高潮在线观看 | 日韩一区二区免费在线观看 | 337p日本大胆噜噜噜噜 | 免费看片日韩 | 婷婷视频在线播放 | 久久资源总站 | 日韩免费中文字幕 | 五月综合激情婷婷 | 日批网站在线观看 | 天天综合视频在线观看 | 久久精品成人欧美大片古装 | 人人草人人草 | 亚洲专区在线播放 | 亚洲综合在线观看视频 | 久久a级片 | 激情五月婷婷网 | 黄色一区三区 | 婷婷亚洲五月色综合 | 亚洲va在线va天堂 | 亚洲国产欧美一区二区三区丁香婷 | 国产视频网站在线观看 | 国产一区二区精品91 | 91久久丝袜国产露脸动漫 | 欧美精品久久久久久 | 亚洲精品视频免费在线 | 玖玖国产精品视频 | 色www免费视频 | 久草国产在线 | 97国产 | 亚洲男男gaygay无套同网址 | 久久精品电影院 | 在线看欧美 | 91手机视频| 国产精品久久一卡二卡 | 久久久久亚洲精品男人的天堂 | 五月开心婷婷网 | 国产亚洲精品久久久网站好莱 | 久久成人高清 | 国产一级片免费播放 | 麻豆av电影 | 婷婷色在线播放 | 最近中文字幕完整高清 | 中文字幕资源在线观看 | 欧美午夜精品久久久久久浪潮 | 久久99精品一区二区三区三区 | 精品国产电影一区二区 | 国产精品成人国产乱一区 | 91在线最新 | 日韩电影在线观看中文字幕 | 亚洲成人资源在线 | 天天搞夜夜骑 | 不卡av免费在线观看 | 亚洲女欲精品久久久久久久18 | 波多野结衣精品在线 | 亚洲aⅴ久久精品 | 麻豆视频一区二区 | 91在线精品视频 | 久久久久久久久久电影 | 久久综合色8888 | 国产视频在 | 色在线视频 | 国产 色 | 亚洲国产成人高清精品 | 国产亚洲在线观看 | 欧美日韩免费观看一区=区三区 | 亚洲激情视频在线 | 香蕉视频网址 | 69av免费视频 | 天天插日日操 | 狠狠狠狠狠色综合 | 免费在线观看日韩视频 | 蜜臀久久99精品久久久无需会员 | 欧美日韩亚洲在线观看 | 少妇bbr搡bbb搡bbb | 午夜精品视频一区二区三区在线看 | 精品久久亚洲 | 免费看成人片 | 色丁香婷婷 | 狠狠网亚洲精品 | 91尤物国产尤物福利在线播放 | 久久久毛片 | 国产亚洲精品成人 | 免费日韩一级片 | 探花视频在线版播放免费观看 | 在线免费观看国产黄色 | 婷婷午夜 | 国产一区电影在线观看 | 999在线观看视频 | 99久久精品电影 | 国产视频69 | 日韩免费在线观看 | 免费观看成人网 | 午夜视频在线网站 | 久草视频免费观 | 婷婷免费在线视频 | 久久激情五月婷婷 | 视频一区亚洲 | 久久久www成人免费毛片麻豆 | 久草在线播放视频 | 综合铜03| 日韩欧美在线影院 | 最新国产精品拍自在线播放 | 97免费公开视频 | 黄色国产高清 | 国内精品久久久久影院日本资源 | 在线观看成人一级片 | 国产h在线播放 | 91亚洲狠狠婷婷综合久久久 | 国产精品久久久久久久久久久不卡 | 中文字幕在线观看视频一区 | www.黄色小说.com | 国产精品成人一区二区 | www.伊人网| 精品欧美一区二区在线观看 | 日韩一区二区免费在线观看 | 精品一区二区三区在线播放 | 国产高清久久 | 欧美日韩综合在线 | 欧美精品视| www色片| 亚洲成人av电影在线 | 免费视频区 | 久久精品草| 亚洲少妇自拍 | 黄色app网站在线观看 | 激情六月婷婷久久 | 在线免费av网| 国产 在线 高清 精品 | 丁香久久久 | 91免费高清在线观看 | 国产精品岛国久久久久久久久红粉 | 久久夜色电影 | 国产亚洲成av片在线观看 | 国产偷国产偷亚洲清高 | 在线黄色免费av | 爱爱一区| 免费观看特级毛片 | 永久免费精品视频网站 | 久久久久久久久久网 | 欧美日韩国产在线观看 | 午夜三级在线 | 日韩av在线高清 | 中文字幕在线观看第二页 | 国产免费小视频 | 日韩av免费观看网站 | 久久精品视频在线看 | 黄色影院在线免费观看 | 最新日韩在线观看 | 成人久久视频 | 中文字幕高清免费日韩视频在线 | 久久精选视频 | 天堂视频一区 | 久色 网 | 日韩一区二区三区高清免费看看 | 久久精品理论 | 婷婷久久五月 | 欧美极品少妇xbxb性爽爽视频 | 日本黄色免费网站 | 国产日韩欧美在线免费观看 | 色综合在 | 亚洲精品男人天堂 | 在线午夜 | 96久久精品 | 国产 色| 狠狠色2019综合网 | 久久 精品一区 | 狠狠色丁香婷婷综合 | 日韩欧美成 | 亚洲视频免费视频 | 青草视频免费观看 | 免费精品视频在线观看 | www.国产在线视频 | 日韩精品一区二区三区高清免费 | 四虎永久国产精品 | 国产精品麻豆三级一区视频 | 五月天色中色 | 欧美va天堂va视频va在线 | 91看片黄色 | 国产日韩在线视频 | 久久久激情网 | 国产又粗又猛又爽又黄的视频免费 | 天天天天爱天天躁 | 日韩成人av在线 | 五月婷婷激情六月 | 热精品| 91视频免费看 | 毛片网在线观看 | 日本在线视频一区二区三区 | 最近av在线 | 探花视频在线观看免费 | 99精品欧美一区二区蜜桃免费 | 中文字幕观看在线 | 日本不卡一区二区 | 亚洲国产精品电影在线观看 | 亚洲欧美日韩国产一区二区 | 国外调教视频网站 | www.色综合.com| 色中色资源站 | 麻豆成人精品 | 国产精品69av| 热久久视久久精品18亚洲精品 | 亚洲在线资源 | 婷婷丁香社区 | 欧美日韩久久久 | 精品国产一区二区三区四区vr |