久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Windows雙工具鏈編譯libdwarf:程序一致性分析與DWARF調(diào)試信息解析實(shí)踐

Windows雙工具鏈編譯libdwarf:程序一致性分析與DWARF調(diào)試信息解析實(shí)踐 1. 為什么會(huì)想到用兩套工具鏈編譯同一個(gè)庫(kù)事情得從一次程序一致性分析說(shuō)起。我手頭有一批從不同途徑收集到的Windows可執(zhí)行文件需要批量確認(rèn)它們之間的構(gòu)建來(lái)源差異找出哪些文件是同一套源碼編出來(lái)的哪些被改動(dòng)過(guò)。常規(guī)做法無(wú)非是比對(duì)文件哈希、檢查PE頭、看導(dǎo)入表和字符串但這類(lèi)淺層特征很容易被有意或無(wú)意地混淆說(shuō)服力有限。往深了走就得看調(diào)試信息——編譯器會(huì)把源文件路徑、編譯器版本、優(yōu)化級(jí)別、函數(shù)邊界甚至局部變量信息寫(xiě)進(jìn)產(chǎn)物里這些細(xì)節(jié)很難偽造也最能反映一個(gè)二進(jìn)制從哪來(lái)、怎么編出來(lái)的。當(dāng)時(shí)我選擇的分析管線需要解析DWARF調(diào)試信息而手頭最順手的方案是編譯一個(gè)libdwarf庫(kù)嵌進(jìn)去。真正動(dòng)手之后才發(fā)現(xiàn)在Windows上編譯libdwarf并不是跑一遍CMake那么簡(jiǎn)單。我先后用MSYS2的MinGW-w64工具鏈和Visual Studio的原生工具鏈各自編了一遍結(jié)果兩個(gè)庫(kù)的行為表現(xiàn)出不少差異。跟蹤排查之后發(fā)現(xiàn)這些差異恰恰就是“程序一致性分析”最關(guān)心的那一類(lèi)信息——不同工具鏈、不同運(yùn)行時(shí)、不同調(diào)試格式到底對(duì)最終二進(jìn)制產(chǎn)生了什么影響。這篇文章就把我踩過(guò)的坑和總結(jié)出的流程完整寫(xiě)出來(lái)覆蓋兩套工具鏈的編譯細(xì)節(jié)、產(chǎn)物對(duì)比方法和容易翻車(chē)的坑。如果你也需要在Windows下做DWARF相關(guān)的工作或者想驗(yàn)證某個(gè)庫(kù)能否在多種工具鏈下保持行為一致這篇應(yīng)該能幫你省下不少折騰時(shí)間。1.1 程序一致性分析要解決的實(shí)際問(wèn)題所謂程序一致性分析往大了說(shuō)包括源碼級(jí)一致性、二進(jìn)制級(jí)一致性和運(yùn)行行為一致性三個(gè)層面。做審計(jì)和取證時(shí)最常見(jiàn)的問(wèn)題是兩個(gè)名字不同、大小也不同的EXE底層是不是同一個(gè)程序某個(gè)二進(jìn)制是否由某一份泄露的源碼編譯而來(lái)發(fā)布版和測(cè)試版之間除了版本號(hào)還改了什么這些問(wèn)題的回答路徑通常是分層的。第一層是計(jì)算文件哈希、比較PE節(jié)區(qū)特征第二層是解析導(dǎo)入導(dǎo)出表看外部依賴(lài)是否吻合第三層才輪到調(diào)試信息。前兩層只能回答“相似不相似”第三層才有機(jī)會(huì)回答“同源不同源”。因?yàn)榫幾g調(diào)試信息里保存的內(nèi)容比如源文件絕對(duì)路徑、具體到行號(hào)的行號(hào)表、每個(gè)編譯單元里的類(lèi)型信息跟源碼和構(gòu)建環(huán)境幾乎是綁定的。只要構(gòu)建機(jī)器、源碼目錄、編譯器版本有一處不同得到的調(diào)試信息就會(huì)留下痕跡。libdwarf在這里扮演的角色就是把這些調(diào)試信息從二進(jìn)制里抽取出來(lái)組織成可以編程訪問(wèn)的結(jié)構(gòu)。分析程序拿到這些結(jié)構(gòu)之后再和reference對(duì)象逐一比對(duì)。我的場(chǎng)景里需要一個(gè)能嵌入到自研工具中的解析庫(kù)不能每次都調(diào)外部命令行工具所以庫(kù)本身必須可控、可編譯、可裁剪。1.2 為什么選libdwarf做解析庫(kù)同類(lèi)型庫(kù)里有幾個(gè)選擇要么直接調(diào)用系統(tǒng)的dwarfdump命令要么用libdw家族的實(shí)現(xiàn)要么用llvm的DWARF解析組件再要么就是libdwarf。我當(dāng)時(shí)做取舍的標(biāo)準(zhǔn)很實(shí)際體積小、依賴(lài)少、API穩(wěn)定、可嵌入。libdwarf基本符合全部條件源碼是純CGit倉(cāng)庫(kù)里沒(méi)有一堆外部依賴(lài)CMake配置也比較簡(jiǎn)潔編譯出來(lái)之后無(wú)論是靜態(tài)庫(kù)還是動(dòng)態(tài)庫(kù)都方便集成。另外libdwarf的許可比較寬松適合放進(jìn)需要分發(fā)給別人的工具鏈里不用逼著使用者去處理傳染性授權(quán)問(wèn)題。它雖然不像llvm系列那樣功能全面但對(duì)我的使用場(chǎng)景來(lái)說(shuō)足夠了——解析編譯單元、讀取DIE樹(shù)、遍歷行號(hào)表、訪問(wèn)字符串表這些核心能力都覆蓋到了。1.3 MSYS2和Visual Studio的定位差異MSYS2本質(zhì)上是一個(gè)在Windows上模擬Unix風(fēng)格環(huán)境的工具集它提供三套終端環(huán)境常用的是MSYS和MINGW64。在MINGW64環(huán)境里工具鏈?zhǔn)荕inGW-w64的GCC編譯器生成的是Windows原生PE格式的可執(zhí)行文件但它保留了Unix習(xí)慣的路徑風(fēng)格和shell命令。Visual Studio則完全不同它用MSVC編譯器生成COFF格式的目標(biāo)文件調(diào)試信息默認(rèn)走PDB和CodeView路徑。重點(diǎn)在于這兩套工具鏈編出來(lái)的同一個(gè)庫(kù)二進(jìn)制層面一定會(huì)不同這是預(yù)期內(nèi)的“程序不一致”。但我們希望解析行為一致、API兼容、語(yǔ)義一致。如果做到這一點(diǎn)就說(shuō)明庫(kù)的跨工具鏈移植做得夠好反過(guò)來(lái)這樣的驗(yàn)證過(guò)程也無(wú)異于對(duì)庫(kù)本身的體檢。后面第五部分我會(huì)專(zhuān)門(mén)講怎么對(duì)比兩套產(chǎn)物的差異而不是直接看二進(jìn)制不一樣就下結(jié)論。2. libdwarf能做什么DWARF調(diào)試信息解析的底層邏輯在進(jìn)入編譯步驟之前我建議你先花十分鐘搞清楚DWARF信息到底躺在二進(jìn)制的哪里、怎么被解析出來(lái)。磨刀不誤砍柴工尤其是后面做一致性分析時(shí)如果你不理解“編譯單元”“DIE”這些概念對(duì)比結(jié)果對(duì)你來(lái)說(shuō)就是一堆無(wú)意義的數(shù)字。2.1 DWARF和PE/ELF的關(guān)系DWARF最初是為ELF平臺(tái)設(shè)計(jì)的調(diào)試信息格式GCC和Clang在Linux上編譯時(shí)默認(rèn)會(huì)把調(diào)試信息寫(xiě)進(jìn)目標(biāo)文件里專(zhuān)門(mén)以.debug開(kāi)頭的節(jié)區(qū)比如.debug_info、.debug_line、.debug_abbrev、.debug_str等等。Windows上的PE文件沒(méi)有這些固定節(jié)區(qū)但MinGW-w64的GCC編譯器在生成Windows目標(biāo)文件的時(shí)候仍然會(huì)把調(diào)試信息以DWARF格式寫(xiě)入PE文件的附加節(jié)區(qū)中。也就是說(shuō)MSYS2里編出來(lái)的二進(jìn)制雖然文件容器是PE但內(nèi)部調(diào)試信息用的還是DWARF。Visual Studio的MSVC編譯器則不一樣它默認(rèn)的調(diào)試信息格式是CodeView存放位置在PDB文件里不直接嵌在PE的節(jié)區(qū)中。這一點(diǎn)必須一開(kāi)始就記清楚用MSYS2編出來(lái)的libdwarf可以解析別的MSYS2程序里的DWARF節(jié)區(qū)但你要去解析一個(gè)用Visual Studio默認(rèn)配置編出來(lái)的EXE最大概率是什么都解析不到因?yàn)樗锩娓緵](méi)有DWARF。做一致性分析時(shí)不能盲目套用解析器先看目標(biāo)二進(jìn)制到底帶沒(méi)帶目標(biāo)格式的調(diào)試信息。2.2 解析鏈路的四個(gè)階段初始化、編譯單元、DIE、屬性libdwarf的API設(shè)計(jì)是圍繞DWARF標(biāo)準(zhǔn)的數(shù)據(jù)結(jié)構(gòu)展開(kāi)的。整個(gè)解析過(guò)程可以簡(jiǎn)化成四個(gè)階段。第一階段是初始化調(diào)用dwarf_init或dwarf_elf_init傳入文件描述符和DWARF處理選項(xiàng)得到Dwarf_Debug句柄。第二階段是遍歷編譯單元調(diào)用dwarf_next_cu_header遍歷到每個(gè)Compile Unit的開(kāi)頭再調(diào)用dwarf_siblingof等函數(shù)在CU內(nèi)部游走。第三階段是讀取DIE每個(gè)編譯單元下面掛著一棵DIE樹(shù)函數(shù)、變量、類(lèi)型、命名空間都以DIE節(jié)點(diǎn)存在。第四階段是解析屬性比如每個(gè)函數(shù)DIE可能帶低地址、高地址、名稱(chēng)、源文件編號(hào)、行號(hào)等屬性。下面這段是我在實(shí)際分析工具里用的一個(gè)最小化解析片段作用就是遍歷所有編譯單元并統(tǒng)計(jì)DIE數(shù)量#include stdio.h #include libdwarf/dwarf.h #include libdwarf/libdwarf.h static void count_cu_dies(Dwarf_Debug dbg) { Dwarf_Unsigned cu_header_length; Dwarf_Half version_stamp; Dwarf_Unsigned abbrev_offset; Dwarf_Half address_size; Dwarf_Unsigned next_cu_header; Dwarf_Error err 0; int cu_count 0; int total_dies 0; while (dwarf_next_cu_header(dbg, cu_header_length, version_stamp, abbrev_offset, address_size, next_cu_header, err) DW_DLV_OK) { Dwarf_Die cu_die 0; int res dwarf_siblingof(dbg, NULL, cu_die, err); if (res ! DW_DLV_OK) { break; } cu_count; Dwarf_Die current cu_die; while (current ! 0) { total_dies; Dwarf_Die sibling 0; int const sres dwarf_siblingof(dbg, current, sibling, err); dwarf_dealloc(dbg, current, DW_DLA_DIE); current sibling; if (sres ! DW_DLV_OK) { break; } } cu_count; } printf(CU count: %d, DIE count: %d\n, cu_count, total_dies); }這段代碼省略了錯(cuò)誤處理細(xì)節(jié)但足以說(shuō)明解析結(jié)構(gòu)并不復(fù)雜。一致性分析時(shí)我會(huì)記錄每個(gè)CUs的version_stamp、address_size、DIE總數(shù)和屬性分布這些數(shù)值直接進(jìn)對(duì)比報(bào)告。2.3 為什么跨工具鏈能檢驗(yàn)實(shí)現(xiàn)一致性DWARF標(biāo)準(zhǔn)雖然規(guī)定了數(shù)據(jù)格式但不同編譯器產(chǎn)出的DWARF信息會(huì)有“方言”差異。比如某些編譯器會(huì)為同一個(gè)類(lèi)型生成多個(gè)重復(fù)的DIE某些編譯器對(duì)行號(hào)表的壓縮策略不一樣某些編譯器的路徑分隔符用的是反斜杠在Unix環(huán)境里則是斜杠。同一個(gè)解析庫(kù)如果面對(duì)GCC系的DWARF和MSVC系的調(diào)試信息都能正確工作說(shuō)明它對(duì)標(biāo)準(zhǔn)之外的各種實(shí)現(xiàn)偏差處理得足夠健壯。反過(guò)來(lái)兩套工具鏈編出來(lái)的庫(kù)解析同一個(gè)GCC編譯出來(lái)的DWARF數(shù)據(jù)結(jié)果也應(yīng)該完全一致。如果結(jié)果不一致那就有意思了——這往往意味著其中一個(gè)庫(kù)的編譯配置有問(wèn)題比如編譯時(shí)宏定義不同導(dǎo)致API行為分支被開(kāi)啟。我在實(shí)際驗(yàn)證中就遇到過(guò)MSYS2環(huán)境下CMake默認(rèn)定義了LIBDWARF_STATIC宏VS環(huán)境里沒(méi)定義結(jié)果鏈接出來(lái)的庫(kù)一個(gè)走靜態(tài)符號(hào)一個(gè)是動(dòng)態(tài)導(dǎo)出符號(hào)解析外部輸入的DWARF文件時(shí)行為相似但用到回調(diào)函數(shù)時(shí)出現(xiàn)了偏差。這類(lèi)問(wèn)題不用兩套工具鏈交叉驗(yàn)證是根本測(cè)不出來(lái)的。3. MSYS2編譯libdwarf環(huán)境準(zhǔn)備與完整步驟我在MSYS2環(huán)境下的編譯流程相對(duì)順利但有幾個(gè)細(xì)節(jié)很值得注意如果你按網(wǎng)上的舊教程操作特別容易卡住。3.1 環(huán)境初始化選對(duì)終端是關(guān)鍵MSYS2安裝完成后開(kāi)始菜單里會(huì)多出好幾個(gè)終端最常見(jiàn)的是“MSYS2 MSYS”和“MSYS2 MINGW64”兩個(gè)入口。很多人第一次用的時(shí)候順手點(diǎn)開(kāi)MSYS終端安裝了一堆mingw-w64包結(jié)果編譯時(shí)怎么都不對(duì)。問(wèn)題在于MSYS環(huán)境是模擬Unix的一層殼它跑的是POSIX工具鏈生成的程序依賴(lài)msys-2.0.dll之類(lèi)的運(yùn)行時(shí)不適合作為Windows原生工具鏈。正確做法是安裝完MSYS2之后用“MSYS2 MINGW64”終端執(zhí)行pacman更新再安裝mingw-w64-x86_64工具鏈。執(zhí)行下面這幾條命令pacman -Syu pacman -S --needed base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-ninja這里有幾個(gè)包名非常容易拼錯(cuò)比如mingw-w64-x86_64-cmake和mingw-w64-x86_64-ninja不能漏掉前綴mingw-w64-x86_64。如果用系統(tǒng)自帶的分發(fā)包名安裝出來(lái)的很可能是MSYS環(huán)境下的工具不是Windows原生的。3.2 CMake配置階段最容易忽略的兩件事我第一次配置libdwarf時(shí)直接執(zhí)行了cmake ..結(jié)果CMake自動(dòng)選擇了Visual Studio生成器生成了一堆.sln文件然后在MINGW64的shell里根本沒(méi)法用ninja或make去編譯。原因在于MSYS2環(huán)境里同時(shí)能看到Windows系統(tǒng)上安裝的Visual Studio生成器CMake的生成器探測(cè)順序并不總是偏向MinGW。我建議明確指定生成器同時(shí)把構(gòu)建類(lèi)型、安裝路徑都一次性配好。完整的配置命令如下cmake -G Ninja -DCMAKE_BUILD_TYPERelease -DCMAKE_INSTALL_PREFIX/opt/libdwarf-mingw -DBUILD_SHARED_LIBSON -DCMAKE_C_STANDARD99 ..這里我的考慮是-DBUILD_SHARED_LIBSON讓產(chǎn)物帶動(dòng)態(tài)庫(kù)方便后續(xù)做DLL導(dǎo)出現(xiàn)象對(duì)比如果不想要?jiǎng)討B(tài)庫(kù)改成OFF即可。CMAKE_C_STANDARD99是顯式告訴CMake使用C99標(biāo)準(zhǔn)避免某些編譯器和默認(rèn)標(biāo)準(zhǔn)不匹配導(dǎo)致源碼里的聲明被拒絕。還需要注意zlib依賴(lài)問(wèn)題。libdwarf支持解析帶壓縮的調(diào)試信息比如.debug_compressed或者.zdebug節(jié)但需要zlib庫(kù)。MSYS2環(huán)境中直接安裝即可pacman -S mingw-w64-x86_64-zlib然后在CMake配置時(shí)加上-DDWARF_WITH_ZLIBON。如果跳過(guò)這一步后面遇到帶壓縮節(jié)的樣本文件時(shí)會(huì)直接報(bào)錯(cuò)。3.3 編譯與安裝驗(yàn)證配置完成之后執(zhí)行編譯安裝ninja ninja install產(chǎn)物會(huì)出現(xiàn)在/opt/libdwarf-mingw下。常規(guī)驗(yàn)證方式是編譯一個(gè)輔助程序或直接用附帶的dwarfdump工具讀一下某測(cè)試文件的調(diào)試信息確認(rèn)沒(méi)有加載和解析錯(cuò)誤。我一般還會(huì)額外寫(xiě)一個(gè)小程序做冒煙測(cè)試邏輯比剛才的示例代碼更簡(jiǎn)單打開(kāi)一個(gè)已知的帶調(diào)試信息的PE文件初始化庫(kù)循環(huán)讀取編譯單元打印每個(gè)CU的版本號(hào)和地址長(zhǎng)度。只要這段程序在MSYS2環(huán)境下能正確跑通庫(kù)的編譯就是基本合格的。額外提一句不要在MINGW64終端里直接跑到Windows原生cmd窗口里執(zhí)行ninja compile。雖然二進(jìn)制是一樣的但路徑風(fēng)格和動(dòng)態(tài)庫(kù)搜索方式會(huì)導(dǎo)致莫名其妙的加載失敗明明編出來(lái)了的DLL聲稱(chēng)找不到。4. Visual Studio編譯libdwarf完全不同的坑Visual Studio環(huán)境下編譯坑比MSYS2多好幾個(gè)量級(jí)。不是MSVC編譯器不行而是這個(gè)庫(kù)的源碼從一開(kāi)始就帶著濃郁的Unix/ELF基因到了MSVC的規(guī)則里處處需要將就。4.1 生成器選擇用CMake還是直接開(kāi)VS工程VS環(huán)境下我推薦用CMake的Visual Studio生成器。如果你在VS的“開(kāi)發(fā)者命令提示符”里配置CMake會(huì)自動(dòng)發(fā)現(xiàn)自己生成.sln文件然后用MSBuild編譯不用開(kāi)IDE界面。具體步驟是以管理員身份打開(kāi)“x64 Native Tools Command Prompt for VS”進(jìn)到源碼目錄執(zhí)行cmake -G Visual Studio 17 2022 -A x64 -DCMAKE_INSTALL_PREFIXC:\libdwarf-msvc -DBUILD_SHARED_LIBSON -DCMAKE_C_STANDARD99 .. cmake --build . --config Release cmake --install .這組命令的關(guān)鍵是-A x64強(qiáng)制目標(biāo)平臺(tái)為x64。如果不加CMake默認(rèn)按Win32來(lái)處理生成32位版本后面和MSYS2編的64位庫(kù)做對(duì)比時(shí)基礎(chǔ)都不一樣整篇分析就廢了。如果電腦上只用Build Tools沒(méi)有完整版VS生成器要改寫(xiě)成“Visual Studio 17 2022”即使沒(méi)有安裝IDE也能用MSBuild編譯。4.2 隱藏的編譯開(kāi)關(guān)幾個(gè)宏直接影響行為libdwarf在Windows下有幾個(gè)條件編譯開(kāi)關(guān)最關(guān)鍵的坑出現(xiàn)在是否定義DWARF_DLL這個(gè)宏上。這個(gè)宏決定符號(hào)的導(dǎo)入導(dǎo)出方式如果打算編DLL需要在編譯libdwarf工程時(shí)讓它導(dǎo)出符號(hào)如果只是靜態(tài)庫(kù)就不要定義這個(gè)宏。問(wèn)題來(lái)了——CMake在配置階段會(huì)根據(jù)BUILD_SHARED_LIBS自動(dòng)處理不同平臺(tái)的符號(hào)宏但MSVC平臺(tái)分支的處理和MinGW不完全一樣。我第一次直接用BUILD_SHARED_LIBSON配置結(jié)果編譯出來(lái)的DLL導(dǎo)出表竟然是空的導(dǎo)致應(yīng)用鏈接時(shí)一堆LNK2019。排查過(guò)程我放后面單獨(dú)說(shuō)這里先給結(jié)論MSVC下務(wù)必確認(rèn)宏DLL_EXPORT和LIBDWARF_STATIC的組合狀態(tài)。我的建議是在CMake配置時(shí)打開(kāi)CMAKE_VERBOSE_MAKEFILE并查看實(shí)際編譯命令確認(rèn)命令行里有沒(méi)有-DDLL_EXPORT。如果編出來(lái)DLL沒(méi)有導(dǎo)出表或者靜態(tài)庫(kù)里有明顯的導(dǎo)入導(dǎo)出修飾符沖突多半就是宏組合錯(cuò)了。4.3 MSVC下LNK2019/LNK2005的完整排查鏈路這是我在VS環(huán)境編譯時(shí)花費(fèi)時(shí)間最長(zhǎng)的一個(gè)坑。當(dāng)時(shí)現(xiàn)象編dwarfdump工具時(shí)鏈接器拋出一堆LNK2019說(shuō)解析不到dwarf_init、dwarf_next_cu_header這些函數(shù)。第一次反應(yīng)是檢查是不是libdwarf.lib沒(méi)有正確鏈接。把lib路徑、附加依賴(lài)項(xiàng)都檢查了一遍幾個(gè)明顯問(wèn)題不存在。于是加開(kāi)了CMAKE_VERBOSE_MAKEFILE把鏈接具體命令打出來(lái)發(fā)現(xiàn)鏈接的是libdwarf.lib沒(méi)錯(cuò)但里面符號(hào)根本沒(méi)有導(dǎo)出。再用dumpbin去看庫(kù)的導(dǎo)出表發(fā)現(xiàn)壓根是空的。這就把猜測(cè)鎖定到了符號(hào)導(dǎo)出宏上?;氐皆创a搜索DLL_EXPORT的引用看到頭文件里的聲明邏輯大致是如果定義了DLL_EXPORT則聲明為_(kāi)_declspec(dllexport)如果定義了LIBDWARF_STATIC則不修飾否則聲明為_(kāi)_declspec(dllimport)。繼續(xù)追下去發(fā)現(xiàn)問(wèn)題出在CMakeLists里對(duì)MSVC平臺(tái)下的-DLL_EXPORT定義依賴(lài)了一個(gè)變量而這個(gè)變量只在構(gòu)建目標(biāo)名匹配的時(shí)候才生效。我在生成解決方案時(shí)改了輸出名稱(chēng)結(jié)果宏的定義條件沒(méi)被觸發(fā)。原因就是這么簡(jiǎn)單。最終解決方式是不依賴(lài)CMake的自動(dòng)推導(dǎo)直接顯式加上編譯選項(xiàng)cmake -G Visual Studio 17 2022 -A x64 -DCMAKE_INSTALL_PREFIXC:\libdwarf-msvc -DBUILD_SHARED_LIBSON -DCMAKE_C_FLAGS_RELEASE/DDLL_EXPORT ..重新生成工程后導(dǎo)出表正常了鏈接也過(guò)了。這個(gè)坑的核心經(jīng)驗(yàn)是Windows下DLL是否導(dǎo)出取決于編譯器命令行里有沒(méi)有定義導(dǎo)出宏這跟Linux下隱藏符號(hào)的默認(rèn)行為完全不同。4.4 VS下的調(diào)試信息選項(xiàng)順帶提一下VS環(huán)境下編譯出的libdwarf庫(kù)本身也會(huì)帶調(diào)試信息但默認(rèn)格式是PDB不是DWARF。因此后面做“兩套庫(kù)解析同一份dwarf文件”的對(duì)比雙方的差異不會(huì)體現(xiàn)在被解析的數(shù)據(jù)上而是體現(xiàn)在庫(kù)自身二進(jìn)制的調(diào)試信息格式上。如果你希望VS編出來(lái)的庫(kù)也帶DWARF格式調(diào)試信息可以嘗試Clang-cl工具鏈它不是MSVC但能插入VS環(huán)境。我試過(guò)用VS 2022附帶Clang的-compiler把生成器換成“Visual Studio 17 2022”并加上-DCMAKE_C_COMPILERclang-cl能編出帶DWARF節(jié)區(qū)的Windows二進(jìn)制。在一些更細(xì)粒度的一致性對(duì)比中這一步非常有用。5. 兩套產(chǎn)物的對(duì)比思路從二進(jìn)制到DWARF逐層拆解兩套工具鏈都編譯成功之后真正有意思的部分才剛開(kāi)始。把兩套產(chǎn)物拿來(lái)做一致性對(duì)比不能只看文件是否一樣因?yàn)椴还茉趺凑{(diào)整編譯選項(xiàng)它們都不可能逐字節(jié)相同。站在程序一致性分析的角度我們想要的是“分層解釋差異”。5.1 文件層面對(duì)比差異是必然的關(guān)鍵是差異可否解釋我習(xí)慣先把兩套產(chǎn)物做一份客觀記錄包括文件大小、文件哈希、PE頭里時(shí)間戳、節(jié)區(qū)數(shù)量和節(jié)區(qū)名稱(chēng)。拿到一組樣例數(shù)據(jù)時(shí)差異會(huì)非常明顯。對(duì)比項(xiàng)MSYS2 (MINGW64 GCC)Visual Studio (MSVC)文件大小約420KB約610KBSHA256不同不同PE節(jié)區(qū)數(shù)量4個(gè)常見(jiàn)節(jié)區(qū)5個(gè)以上常見(jiàn)節(jié)區(qū)節(jié)區(qū)名稱(chēng).text/.data/.rdata/.bss.text/.rdata/.data/.pdata/.gfids調(diào)試信息位置內(nèi)嵌DWARF節(jié)區(qū)獨(dú)立PDB文件鏈接器GNU ldMSVC link運(yùn)行時(shí)依賴(lài)msvcrt或ucrtbaseVCRUNTIME等看到這些差異不要慌。只要差異能對(duì)應(yīng)到工具鏈特征一致性分析就可以繼續(xù)往下推進(jìn)。比如節(jié)區(qū)名稱(chēng)和數(shù)量變化是MSVC鏈接器添加了GFIDS和PDATA節(jié)區(qū)的結(jié)果調(diào)試信息位置不同是默認(rèn)調(diào)試格式差異的結(jié)果。這些都是可解釋差異說(shuō)明兩個(gè)二進(jìn)制由不同工具鏈構(gòu)建但來(lái)源源碼可能是同一份。5.2 DWARF信息對(duì)比關(guān)注解析結(jié)果而非文件本身既然兩套庫(kù)都是用來(lái)解析DWARF的最核心的驗(yàn)證方式是讓它們?nèi)ソ馕鐾粋€(gè)測(cè)試PE文件再比較解析結(jié)果。這個(gè)測(cè)試PE文件需要同時(shí)具備內(nèi)嵌DWARF節(jié)區(qū)所以我用MSYS2的GCC編了一個(gè)帶-g選項(xiàng)的測(cè)試程序。解析結(jié)果對(duì)比我會(huì)記錄這些指標(biāo)編譯單元數(shù)量、DIE總數(shù)量、行號(hào)表?xiàng)l目數(shù)、每種屬性名稱(chēng)的出現(xiàn)頻次、字符串表里的源文件路徑條目數(shù)。理論上兩套庫(kù)解析這些數(shù)據(jù)得到的結(jié)果應(yīng)該完全一致因?yàn)檩斎胂嗤?、DWARF標(biāo)準(zhǔn)相同、解析邏輯也來(lái)自同一份源碼。我在實(shí)際測(cè)試中遇到過(guò)一個(gè)差異點(diǎn)MSYS2版庫(kù)解析出的某個(gè)函數(shù)DIE的訪問(wèn)標(biāo)志屬性和VS版庫(kù)不同。排查后發(fā)現(xiàn)這不是庫(kù)的解析結(jié)果不同而是被解析的測(cè)試文件在編譯時(shí)出現(xiàn)了非確定性GCC在MSYS2環(huán)境里默認(rèn)對(duì)部分路徑做了大小寫(xiě)折疊導(dǎo)致DWARF里記錄的路徑大小寫(xiě)和另外一份樣本不同。由此可見(jiàn)一致性分析的對(duì)象數(shù)據(jù)質(zhì)量直接影響最后結(jié)論的可靠性。5.3 程序語(yǔ)義層面的判定思路二進(jìn)制對(duì)比和DWARF信息對(duì)比都只能說(shuō)明“構(gòu)建特征”判斷“程序是不是同一個(gè)程序”還要考慮語(yǔ)義。一致性分析里最立得住的做法是把兩個(gè)二進(jìn)制分別做反匯編提取出函數(shù)級(jí)的控制流圖再比較控制流圖的結(jié)構(gòu)是否同構(gòu)。這一步可以用現(xiàn)成的反匯編庫(kù)或者直接導(dǎo)出為中間表示再做圖匹配。因?yàn)椴煌幾g器的指令調(diào)度差別很大直接用指令字節(jié)匹配幾乎不可行但控制流圖的結(jié)構(gòu)和基本塊的邏輯順序通常能保留到較高比例。如果在控制流圖層面都能匹配上再結(jié)合DWARF里源文件路徑的一致性基本可以認(rèn)定是同一份源碼在近似環(huán)境下編譯出來(lái)的。反之控制流圖差異很大但DWARF路徑一致就要考慮源碼中是否存在條件編譯分支或者編譯器優(yōu)化級(jí)別不同導(dǎo)致的結(jié)構(gòu)性改動(dòng)。6. 實(shí)操中容易翻車(chē)的幾個(gè)細(xì)節(jié)總結(jié)最后把幾個(gè)常規(guī)文檔里幾乎不會(huì)寫(xiě)的坑集中整理一下做一次完整復(fù)盤(pán)。6.1 路徑風(fēng)格和編碼問(wèn)題會(huì)污染對(duì)比結(jié)果MSYS2的GCC默認(rèn)編譯時(shí)會(huì)記錄Unix風(fēng)格路徑比如/usr/include/stdio.h。Visual Studio的MSVC記錄的是Windows風(fēng)格路徑比如C:\Program Files\Microsoft Visual Studio\2022...\include\stdio.h。當(dāng)你把兩套工具鏈編出的庫(kù)用于解析同一個(gè)測(cè)試文件時(shí)測(cè)試文件里記錄的源文件路徑來(lái)自編譯它的那個(gè)環(huán)境跟當(dāng)前解析庫(kù)的環(huán)境無(wú)關(guān)。但如果你拿兩套庫(kù)分別解析“它們各自編譯出來(lái)的測(cè)試程序”那結(jié)果里天然混入了路徑風(fēng)格的差異對(duì)比報(bào)告會(huì)被污染。我建議做對(duì)比解析實(shí)驗(yàn)時(shí)只讓兩套庫(kù)解析同一個(gè)第三方PE文件而不是各自編一個(gè)再互相解析。這樣能得到干凈的同輸入異解析器對(duì)照數(shù)據(jù)。6.2 分清DWARF、CodeView和PDB之間的邊界再做一次強(qiáng)調(diào)MSVC默認(rèn)的調(diào)試信息格式不是DWARF而是CodeView并把內(nèi)容輸出到PDB文件。只有當(dāng)MSVC配置了/Z7選項(xiàng)時(shí)才會(huì)把CodeView調(diào)試信息嵌進(jìn)目標(biāo)文件即使如此也不是DWARF。所以在Windows上做程序一致性分析必須事先定義好詞匯表用MSYS2工具鏈編的程序可以被libdwarf直接解析DWARF節(jié)區(qū)用VS工具鏈編的程序要分析調(diào)試信息多半得走PDB解析路線。這直接影響到分析工具的設(shè)計(jì)。我在自研工具里做了兩層調(diào)試信息提取先嘗試DWARF解析拿不到結(jié)果就轉(zhuǎn)PDB解析器。libdwarf只覆蓋了一半場(chǎng)景另一半需要額外的PDB解析邏輯。6.3 一組實(shí)測(cè)數(shù)據(jù)示例下面這組數(shù)據(jù)來(lái)自我本地用同一個(gè)小型測(cè)試程序分別在MSYS2和VS環(huán)境下編譯再用同一套內(nèi)嵌了libdwarf的分析器去解析的對(duì)比記錄。指標(biāo)MSYS2編譯的測(cè)試程序VS編譯的測(cè)試程序原始文件大小1.8MB2.6MB內(nèi)嵌DWARF節(jié)區(qū)有.debug_info等無(wú)PDB文件無(wú)有l(wèi)ibdwarf可解析CU數(shù)70解析耗時(shí)約30ms不可用反匯編函數(shù)數(shù)96118數(shù)字差異很大但每一條都能對(duì)應(yīng)到工具鏈的構(gòu)建策略差異。比如VS編譯的程序函數(shù)數(shù)更多是因?yàn)檎{(diào)試版里包含更多安全檢查和輔助樁函數(shù)這些函數(shù)在GCC的普通Release配置里會(huì)被優(yōu)化合并。這類(lèi)數(shù)字的意義不在大小本身而是當(dāng)你面對(duì)一份陌生二進(jìn)制時(shí)這些特征能幫你反推它的構(gòu)建工具鏈和大致配置。這正是程序一致性分析在日常取證中最樸素也最實(shí)用的輸出。6.4 一個(gè)小技巧用CMake Preset統(tǒng)一管理雙工具鏈配置兩套工具鏈的配置命令冗長(zhǎng)我后來(lái)直接把它們固化進(jìn)CMakeUserPresets.json一鍵切換。感興趣的可以按下面結(jié)構(gòu)配置把源碼目錄下的工具鏈切換從五分鐘的手動(dòng)操作縮短到一條命令{ version: 3, configurePresets: [ { name: mingw, displayName: MSYS2 MINGW64, generator: Ninja, binaryDir: ${sourceDir}/build-mingw, cacheVariables: { CMAKE_BUILD_TYPE: Release, BUILD_SHARED_LIBS: ON, CMAKE_C_STANDARD: 99, DWARF_WITH_ZLIB: ON } }, { name: msvc, displayName: Visual Studio 17 2022, generator: Visual Studio 17 2022, binaryDir: ${sourceDir}/build-msvc, cacheVariables: { CMAKE_BUILD_TYPE: Release, BUILD_SHARED_LIBS: ON, CMAKE_C_STANDARD: 99, CMAKE_C_FLAGS_RELEASE: /DDLL_EXPORT } } ] }使用時(shí)分別執(zhí)行cmake --presetmingw和cmake --presetmsvc即可生成兩套工程互不干擾。這個(gè)做法我后來(lái)也用到了別的庫(kù)上對(duì)于任何需要在Windows下做跨工具鏈驗(yàn)證的項(xiàng)目都適用。最后再分享一點(diǎn)個(gè)人的體會(huì)編譯一個(gè)庫(kù)本身不算難難的是圍繞編譯配置建立一套可解釋的對(duì)比流程。MSYS2和VS的差異不是錯(cuò)誤它們只是從不同角度描述了同一個(gè)程序的構(gòu)建歷史。把這些差異一層層拆開(kāi)并給出解釋程序一致性分析的價(jià)值才能真正落地。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
少妇三p| 日美免费黄片| 亚洲se电影| 一色网男人的天堂| 日韩精品中文字幕二区| 青娱乐老司机视频| 天天射天天色成人| 亚州高清av| 天美国产三级传媒| 五月婷婷六月激情| 亚欧高清在线| 操逼天美3区| 精品午夜福利| 欧美精品激情| 午夜精品久久久久久久| 另类av天堂| 99热这里| 2010男人的天堂| 欧美麻豆成人同性GⅤ在线| 精品国产三级av韩国在线| 夜夜精品视频一区二区| 亚洲资源网| 久久久久无码| 91天射| 嗯阿好爽好紧| 成人女人国产| 亚洲欧美国产中文字幕| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 九九九九精品| 永久免费av无码网站国产app| 逼操网站| 国产亚洲美日韩Aⅴ中文字幕无码成人| 午夜精品久久久久久久久久久久久 | 啊啊啊啊好大好硬啊啊啊啊啊 | 亚洲丝袜二区在线| 夜夜做夜夜爽精品视频| 日韩精品啪啪啪| 欧美在线 亚洲| 九九九精品一区二区无码| 亚洲色图国产另类| 日韩精品人妻中文字有码在线| 一本正道久久熟女| 精品人妻视频一区二区三区蜜桃视频| 夜夜国自区| 死我十八禁| 青青草中出视频 | 日B操| 秋霞免费无码视频日韩A片| 91亚洲网| 亚洲日本激情| 成年人黄色小视频网站| 久久九色| 欧美在线伊人色| 色婷婷蜜臀av| 精品女同一区| 日曰骚久久精品| 秋霞一集毛片观看| 亚洲欧美中文一区二区三| 欧美十八禁导航成人| 久操视频资源站公开| 免费久久精品麻豆一区二区av| 伊人99热| 屌妞视频久久久久久久| 我爱操| 亚洲欧洲日韩中文字幕一区| 亚洲综合999| 成人一道本免费视频| AV和黑人在线播放| 亚洲欧美一区二区三区在钱蜜桃 | 操死我了啊啊啊| 欧美视频一区二区三区| 青娱乐国产剧情av一区| 九九性爱网| 99丝袜福利在线播放| 久久大线蕉一区| 97视频播放| 亚洲一区在线观看欧洲| 婷婷色色五月天| 自拍欧美| 嗯嗯啊啊操我| 伊人精品国产| 免费av在线播放二区| 色yeye成人免费视频| 婷婷五月天成人| 足交视频老司机| 亚洲精品人体| 99热自拍| 久久久无码精品人妻二区| 国内偷拍精品一区二区| 夂久色| 久久噜噜噜精品国产亚洲综合| 国产传媒日韩| 欧美日韩岛国大片在线观看| A啊啊在线观看| 欧美日韩亚洲天堂| 国产精品一区二区 尿失禁| 亚洲国产欧美中文永久| 青草影院内射高潮| 黄色视频特级毛片| 97超碰色中文字幕| 亚洲欧美日韩精品久| 97欧美精品综合| 99精品九九九九九九| 亚洲小电影免费涩涩成人在线高清| 日韩无码专区| 亚洲动态色图| 日韩精品.久久精品.AV女优.天美传媒| 伊人国产视频| 亚洲一曲日韩精品| 亚洲淫乱骚妇AV| 五十路三区在线| 婷婷久久五月| 99色热| 99久久久无码国产精品性男| 欧美亚州综合网图片| 久久‘黄片视频| 1024手机看片欧美日韩| 激情抓乳插进去啪啪啪日韩 | 婷婷啪啪| 91中出视频| www网站黄| 97爱b| 激情熟女12P| 欧美色图亚洲色图成人在在线| 少妇精品久久| 97 亚洲 日韩 欧美 在线| 熟妇视频一区二区三区在线| 久久久久久久久久久97| 婷婷五月天激情小说| 五月天亚洲网| 亚洲天堂热| 大粗鳼巴久久久久| 国产久久久9999| 精品78| 裸体美女免费看网站青草| 日本幼女18+| 国产无马av| 欧美最婬乱婬爆婬牲视频| 成人在线视频网| 亚洲女优有码无码高清| 色呦呦、国产精品| 伊人精品久久网站| 久久久一二三四区| 中文字幕人妻丝袜| 草草影院最新网址| 欧美天天| 久久久久久久久国产| 国产强奸超碰AV| 91精品国| 亚洲区限制级| 97精品国产97久久久| 国产主播福利| 久射吧| 日韩人妻少妇 一区二区三区| 欧美组图日韩亚洲中文字幕| 日韩综合97P| 综合色色婷婷| 亚洲av综合伊人久久| 国产精品久久久久久久久久久久久久久久 | 美女写真| 91免费看一区二区三区| 97爱爱官网| 二区熟妇韩日| 九九亚洲| 欧亚成人| 亚洲无 码A片在线观看麻豆| 欧美熟女逼久久久久久| 日韩三级久久久| 欧美日韩国产黄色片| 视频二区美腿制服人妻欧美| 亚洲av热热色| 人人操AV| 日日夜夜干| 日本操逼二区| 久久黄色性爱视频| 91老熟女| 欧美色九九| 亚洲综合图色在线| 九色97| 国产一区二区三区导航| 欧美日韩操逼动图| 人妻熟女字幕一区二区| 国产精品久久久久久片| 日本狂喷奶水在线播放212| 欧美天天搞| 物业黑人 AV一区| 用力操死我| 啪啪啪大香蕉| 成功精品影院| 草b在线| 亚州色图片在线色| 欧美性猛交美女自慰91| 色哟哟-国产专区| 91超碰在线播放| 囯产乱伦一区二区三女| 国产精品久久久久无码Av网曝门| 高精欧美色| 超碰97久久国| 99re热| 欧美综合第一| 欧美熟妇乱码在线一区| 久久伊人在线五区| 欧美熟女妇同| 1区2区3区中文字幕日韩| 后入 亚洲 美女 射| 伊人久久艹| 99re久久| 99热这里只有精| 屌逼麻豆| 超碰 另类 欧美| 九一屌逼| 中文字幕日韩人妻视频一区二区三区交换夫妻 | 天天草天天干天天日| 性影在线视频| 国产区性爱在线视频秋霞豆| 乱色视频中文字幕| 大香蕉啪啪啪| 亚洲污污网站| 校园春色 亚洲| 亚洲脚交| 亚洲情色综合| 欧美A片中文字幕| 牛牛操视频逼| 久久国产乱子伦精品免费女人| 嫩草在线视频| 久久欧美性爱视频| 少妇高潮99p| 欧美专区第一页| 国产AV天美| 韩国嫰模上门援交视频| 亚洲成成熟女人综合一区二区| 淫荡网址| 淫荡熟女乱伦网| 韩国三级理论在线| 日本裸体久久色噜噜| 国产亚洲色婷婷99精品91| 91精品免费| 人人妻人人澡人人爽久久av| 国产对白刺激视频| 亚洲综合九九| 国产精品视频在线播放| 国产99热| 美国一区二区免费视频| 厕所偷拍在线| 欧美色交| 久久这里是精品| 无套内射性感少妇视频| 不卡人妻少妇精品毛片一区23区视频| 精彩久久中文| 久久这里只精品免费福利| 国产欧美岛国精品一区| 日韩女优在线| 天天欧美| 国产精品蜜乳AV| 猛交交| 青草视频人妻在线观看| 女人天堂av在线播放| 芊芊操逼视频无码| 九久久九精品视频| 久久久久久久| 亚洲欧美国产日本一区二区三区| 青青操在线亚洲视频观看欧美在线 | 激情久久久| 97国产天堂岛| 2024黄色视频| 另类图片五月天| 激情综合网一盗摄| 一区二区三区亚洲| 99国产精品久久久久久久成人热 | 香蕉综合网| 嫩草影院永久在线制服丝袜| 玖玖爱影院| 1禁看欧美黄片免费看| 国产成人亚洲精品自产在线| 97超碰伊人| 成人七区| 亚洲永久永久永久永久一级一级一级精品| 人妻精品一区二区三区| 成人免费福利在线观看| 60秒免费小视频| 中文自拍欧美影视| 亚洲一区二区 麻豆传媒| 啊啊啊好舒服视频| 丁香五月久久| 青青草好吊色| 999日韩中文精品观看视频。| 懂色影视久久| 国产超碰| 夜夜嗨一区| 国产懂色精品国产av| 色av中文字幕| 国产精品爽爽va在线观看98| 久久精品女同亚洲女同13| 亚洲欧美综合区自拍另类| 日本精品国产视频| 日韩性爱视频在线免费观看 | 精品一区二区三区蜜桃| 少妇超碰在线| 99热在线播放| 亚洲综合性感在线| 金莲网址| 久久亚洲日韩熟女精品| 蜜臀久久久久久999| 亚欧美色| 磁力99AV| 国产欧美日韩精品中文| 国产AB视频| 综合网色| 91在线免费精品视频| 青苹果影院男人的天堂| 交换娇妻呻吟声不停中文字幕| 加勒比综合九九99视频在线播放| 国产日韩精品人妻久久久久色欲网站| 青青欧美| 亚洲人妻av| 少妇一区二区三区| 天天夜夜久久| 国产热RE99久久6国产精品首| 久久久三区二区一区| 九月色婷婷| av毛片aaaaa免费看| 久热久一区二区三区| 久久成人国产精品| 天天在线91| av大香蕉| 中文字幕一区二区三区字幕| 精品一区99999| 五月天婷婷色色| 一区二区三区国产在线播放| 久久超碰大香蕉| 日韩性爱播放| 日韩操p| 91男人综合| 男女91| 最近2019中文字幕国语免费版| 黑人在线91| 97内射偷拍| 日韩黄色成人性爱| WWW操逼| 熟女熟妇一区二区三区视频| 中国黑人三级片网站上区| 国产小u女在线观看| 欧美大片91| 日本羞羞的视频在线播放| 国产精品视频| 少妇被玩视频二三区| 亚洲国产欧美中日韩成人综合视频| 久久久中文| 春色综合免费| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 91精品国产91久久久久久久久久久久| 亚洲精品天天影视综合网| 国产一区二区三区影片| 中国女人内射6XXXXX| 一区在线精品中文字幕| 欧美中日韩XXXX| 九9热伊人| 四季AV综合网址| 午夜免费视频1000| 五月丁香婷婷综合| 999国产精品999| 久久久久久久久久va| 天堂性色| 9I1性色影院| 精品无码产区一区二| 国产福利夜| 久久久久成人蜜桃精品| 日韩人妻大香蕉| 性爱av网站| 国产三区免费在线观看| 免费伦费视频在线观看| 奇米四色影视777久久久| 98人妻精品一区二区色欲| 怡红院成人视频| 1024精品在线| 黄页av| 欧美美逼| 97超碰美女| 久久久久久裸体| av婷婷色网| 久热色情精品| 亚洲。日韩。欧美| 欧美激情久| 天天操美美| 9999久久久久| 97久久超碰亚洲| 91制服丝袜| 91天堂| 97亚洲色图| 亚州一区二区| 国产粉嫩蜜臀av一区二区三区| 久久精品| 日本操大逼| 亚洲一区二区中文字幕| 精品一区二区成人动漫| 男人的天堂网免费| 色天使大香蕉| 婷婷九月国产| 中国特猛少妇色xxx| 国产在线视频午夜精华在| 亚洲一区二区三区春色| 91在线视频免费播放| 顶级丝袜熟女一区二区三区| 婷婷激情五月| 东北女人的毛片| 日韩人妻精品| 亚洲久久久| av一区二区三区不卡| 日本日逼高清| 男人的天堂啪啪| 夜夜狼人妻| 免看60秒涩涩视频| 又大又大又大又粗爽高潮观看| 日韩欧美操逼xxx| 国产色呦呦| 欧美日韩国产传媒在线精品| 日韩 女同 综合| 欧美色图 色综合图| 美国日韩黄片| 成人日本视频人妻在线| 国产无遮挡| 蜜乳成人AV| 久久毛卡| 超碰激情808| 欧美激情一| 亚洲高清视频在线免费观看| 免费在线黄片视频| 97视频在线观看播放与子乱对白在线……| 久日91在线| 亚洲 日本 不卡| 无码最新| 日韩一级二级在线| 91N综合网| 欧美一级久久久久久久大片动画| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 啪啪综合网| 色香在线| 中文字幕人妻资源在线| 狠狠狠狠狠狠| 人人九九精| 一级二级三级黑人无码| 亚洲日产专区| 精品人妻av区天天看片| 综合自拍| 国产精品毛片| 日韩欧美俄罗斯A片| 欧美se亚洲| 精品一级| 色婷婷丁香五月天| 九九九九一区| 日本中文字幕在线电影| 99久久9| 五十路六十路素人熟女| 久久久久性熟视频| 亚州欧美色图| 久久久蜜桃一区二区三区| 91亚洲狠狠色| 无码国产精品午夜不卡(| 九九九九欧美| 黄色av网站在线播放| 欧美国产日韩高清在线| 国产视频大全| 欧美人妻精品一区二区| 91国产在线精品| 国产一区二区二区按摩精品啪视频| 色丁香五月婷婷| 亚洲黄色电影| 91麻豆天美国产欧美日| 91制服丝袜中文字幕| 欧美日韩91| 色网亚洲人| 国产农村一一级特黄毛片| 国产AV线| 五月丁香六月婷| 嗯嗯不要 视频| 日日干日日| 国产精品第一页国产大屁股视频免费区| 久久久久9999| 日本影视久久免费| 欧美熟女妇同| 国产精品熟女丝袜一区二区| 91天天综合在线| 无码色| 另类天堂| 91欧美美女日韩国产婷婷| 亚洲国产欧美另类自拍| 亚洲少妇激情一区二区三区| 99热色精品| 欧美亚洲天堂| 色www精品视频在线观看| 午夜寂寞欧美| 亚洲久久久久| 美女干逼2| 天美麻花大全视频| 84YTCOM性无码| 东京热不卡视频| 97爱b| AA特级绝黄| 99re视频在线播放青草| 久久最新视频免费观看| 岛园激情| 香伊人在线| 天天综合站| 大香蕉碰| 午夜福利免费福利视频| 欧洲在线性爱视频| 欧美九一精品久久久熟妇| 开心五月天激情网| 日韩亚洲精品一区二区| 久草在线| 在线洲亚线| 欧美性战999| 国产精品一区二区黄片| 中文字幕精品一区欧美| 人妻一区二区三区熟女| 欧美一品道| 爱欲AV| 亚洲色诱惑| 成人a级高清视频在线观看| 成人AV在线网站| 欧美日韩少妇色情| 婷婷五月影院| 亚洲AV无码国产精品久久久久 | 亚洲欧美日韩夜夜| 蜜乳视频网站| 久久免费少妇| 97视频播放| 欧美色图97| 国产九区| 天天日天天射天天干| 97五月天| 一级免费啪啪片| 日本成人A片免费看| 日日夜夜免费| 91制服丝袜| 蜜桃臀一区二区三区久久| 午夜精品久久久99| 久久女人视频| 欧美综合站| 免费黄色视频网址| 91小视频| 国产1769在线| 精品伊人久久久大香线蕉小说| 精品毛片av一区二区| 蜜臀无码视频在线观看| 97视频在线播放| 久热最新在线杭州| 久夜视频| 欧美亚洲| 一级做受视频免费是看美女| 欧美亚洲天堂| 久久精品国产精品一区| 国产一级内射高清视频| 欧美综合自拍| 三男一女不戴套的A片| 一级二级在线观看| 欧美一区二区男人天堂| 日本性交操一区二区不卡系列| 久久综合九色综合欧洲98| 精品免费一区| 成年人黄色视频免费| 伊人国产成人av网站| 加勒比伊人| 国产成人91一区二区三区| 人妻色偷色噜| 欧美性爱免费短视频| 免费福利视频中文字幕| 久久av一级av少妇av高潮| 色色香蕉| AV电影在线播放| 超碰在线91| 殴美,日韩国产伦精品| 啊啊啊好湿国产一二| 欧美久久久15P| 伊人伊人LD| 九九免费影片| 一区二区三| 91校园春色长篇| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 综合操逼| 25国产精品免费观看| 人妻出轨一区二区三区| 日韩少妇在线视频| 亚洲精品91| 伊人久久综合影院精品久久久| 日本不卡高清视频| 在线播放成人网站| 嗯嗯啊啊用力视频免费| 黄色十八禁| 老女人综合| 亚洲密乳AV| 亚洲啪啪性视频| 久久的网站啊啊啊啊啊| 大香蕉日亚洲日本亚大| 99热| 亚洲码专区| 国产极品999| 成年人免费观看网站| 亚洲成人激情小说视频| 蜜乳AV网址| 欧美欲色| 青青草好吊色| 国产精品熟女丝袜一区二区| 久久色激情一区二区三区| 人人爽夜夜玩视频| 中文字幕高清精品一区| A久久| 中文字幕AV片| 亚洲色婷婷久久91| 亚洲色五月| 激情四射五月天| 国产午夜精品在线观看| 国产激情综合| 很狠操| 一级AV性爱| 青青草视频久久| 超碰偷拍| 国产亚洲精品玖玖玖在线观看| 99国内精品| 欧美激情 亚洲色图| 亚洲精品无码成人久久久99| 中文字幕视频在线观看一区二区| 999国产精品999久久久久久| 亚洲成人免费中文字幕| 天天综合网久久ww| 97色网| 狂操嫩妻视频一区二区三区| 久久亚洲日韩国产欧| 日本三级一区二区 在线| 极品粉嫩一区二区| 无码天堂| 久久久久久久久久久六六| 色约约一区=区三区| 亚洲性爱高潮影院| 中国操逼无码| 人妻人久久精品中文字幕| 天天看精品动漫视频一区| 五月丁香六月激情综合| 久久久一二三四区| 每日更新AV| 乱码人妻一区二区三区| 日本成人A片免费看| 超碰天天久久79| 免费中文综合精品| 日本97久久久精品| 亚洲AV秘无码一区..| 亚洲成人一二三区| 一道α片欧美| 91高跟美女在线播放| 精品国产一区二区三区在线播出| 天天摸夜夜摸| 亚欧毛片基地国产毛片基地| 色五月天AV| 最新av中文字幕高清| 欧美白嫩女HD| 欧美性爱第一区| 欧美亚洲厕所精品偷拍91 | 久久久国产亚洲精品系列| 日韩美女高潮喷水视频| 操逼操网| 台湾佬大香蕉| 91国产丝袜足交精品视频| 翔田千里Av在线| 九九热精彩视频| 国产午夜激片Av毛片不卡| rivers-china.com| 熟女精品一区二区三区| 精品一区二区三区国产 | 性在久久久久久| 中文字幕精品三级久久久| 综合色99| 精品蜜乳AV免费观看| 美女黑人91神马| 九九色婷婷| 日韩欧无码一区二区三区免费不卡| 91av天美性媒精品视频| 日韩视频啪啪| 亚洲精品99999| 99热导航| 好好的日:com久久九九| 日本天天操| 中文字幕成人乱码熟女精品国50| 国产天天骚| 浪人综合网| 78久久| 艳尻美人妻| 精品久久久亚洲AV成人网站| 熟女乱3伦999| 人妖欧美一区二区| 闷骚老熟女15P| 亚洲日本韩国在线| 日韩熟女操逼| 天天干18禁| 少妇色综合| 久久99黄色卞西瓜| 亚洲综合中文字幕有码| www久久国产精品| 超碰在线综合97| 亚洲欧美日韩有码| 另类小说五月天| 约操熟妇| 日韩精品在线放| 国产美女自拍视频| 99精品高潮| 天天操天天射青青草| 免费在线观看AV无码网站| 中文字幕在线免费观看2| 超碰在线日韩一区| 天天综合网~91综合网| 久久久久久大| 天天干美少妇一区| 婷婷丁香五月天亚洲天堂网| 一区二区三区免费视频入口| 2017天天插| 97欧美色| 欧美日韩97在线| 亚洲欧洲色情高清| 中文字幕片| 亚洲有码 视频一区| 91麻豆va国产精品| 亚洲精品无码成人久久久99| av一区二区三区不卡| 亚洲天天更新| 熟女熟妇一区二区三四区| 男女性扦B| 97精品在线| 国产精品久久久九九九| 99国产精品久久久久久久成人热 | 欧美激情区| 色97欧美| 日韩精品三级| 国产尤物在线三区| 蜜臀99久久精品| 夜夜嗨老熟女AV一区二区三区| 一区二区视频你懂的| 第45页一区二区| 亚洲AV乱码专区国产噜噜亚洲| 操久久久久久| 美女黄色一级A视频| 丁香五月久久| 久久免费精彩视频| 五月综合久久| 中文字幕一区av| 久久久久成人蜜桃精品| 无码人妻一区二区一牛影视| 狠狠狠一区二区三区| 暖暖精品二区三区观看| 亚洲成人一二三区| 性色国产东北露脸精品视频| 4141514逼喷水三级片| 日韩欧美女优电影| av操操不卡| 亚洲第91页| 91黑丝操| 欧美大的香蕉有线电视视频 | 亚洲日本男人天堂网| 91色综合激情| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 亚洲色五月| 狠狠躁AV| 麻豆 亚洲 97| 黑人粗大V S日韩女优视频| 4tube欧美女厕所| 91亚洲人| 九九精品99| 国产超碰| 蜜臀精品1区2区| 国产妇女精品视频青青草| 97超碰伊人| 五十路熟女人妻一区二区在线观看 | 9999免费精彩视频| 欧美综合骚| 美女AV一区二区| 青青草影视蜜久久| 97香蕉网| 综合影视国产无码| 综合色图亚洲欧美| 丝袜美女诱惑 91 视频| 大香蕉视频啪啪啪啪| 欧美性爽xyxOOOO| 亚洲一区二区三区AV无码 | 91白嫩| 国产91亚洲精品一区二区三区| 干日本人少妇午夜寂寞影院| 综合激情五月天| 夜夜久久| 91n处女在线观看| 伊人网青青| 91人妻PORNY九色大屁股| 日韩av三四区| 中文字幕青青草| 夜夜操2028| 久久超碰98| 97色亚洲| 午夜一区| 亚洲色图 图片| 久久精品国产亚洲AV清纯| 每日更新AV| 日产中文字幕2020| 友优传媒精品在线一区二区| 岛国AB视频| 800zy一区二区| 成人性交免费视屏| 国产精品久久久久久 百度| 欧美熟妇乱码在线一区| 视频二区美腿制服人妻欧美| 日韩精品人妻一| 精品无吗久久| 啊啊啊爽爽| 插欧洲美女欧美精品| 久久亚洲熟妇在线视频| 操逼操2| 色色激情五月天| 九九超碰综合网| 国产中文精品一区二区在线观看| 高清不卡国产| 九七超碰人人乐| 欧美综合娱乐久久| 日韩人妻少妇中文字幕| 国产精品一区二区麻豆| 欧美aaaaaaa| 精品999日本| 国产中文字幕在线点播| 色女网日韩| 婷婷超| 九九久久一区二区三区| 亚洲欧美高清| 欧美色三级片91| 国产精品国产精品国产| 91丝袜美女国产| 密臀视频三区免费网站| 国产原创自拍| 少妇久久久久久久久| 97人肏| 深爱伊人影院| 亚洲国产麻豆一区二区三区| 97硬碰| 97资源久久| 东京太热久久久| 国产精品人妻无码久久久老鸭窝| 国产原创精品| 国产第12页| 欧美在线视频播放| 国产1769在线| 亚洲成人AB| 志村玲子视频一区二区| 精品78| 亚洲一区二区三区麻豆传媒| 激情五月综合开心五月| 精品9区| 五月天黄色激情视频| 偷拍导航视频网站| 青青草原人妻| 亚洲黄片免费在线播放| 性性久久| 99久久久无码国产精品性男| 97精品全部| 91色女| 午夜福利无毒不卡| 91色综合色| 五月婷婷六月丁香| 久久永久无码人妻视频| 精品一二三区四视频| 黄色av片三级三级三级免费看| 亚州色图欧美色图| 性感女人网页在线观看视频| 精品丝袜无码一区二区三APP| 激情综合网一盗摄| 香蕉综合网| 免费av高清无码| 96精品久久久| 在线人妻熟女一区二区三区四区五区| 2017人人操,人人摸| 亚洲97网站| 青青草日本无码| 亚州操逼图| 69精品| 人妻免费观看| 人妻啊啊人妻啊啊| 精品高清一区二区三区三州| 日韩日韩日韩-国产乱码精品一区二区| 97香焦色区| 欧美性爱三区二区| 一区在线精品中文字幕| 任我爽在线视频免费观看| 精品女人999| 三级三级三级a级全黄三| 九九九免费视频| 99热日| 最新一二三区视频| 亚欧性爱在线无码| 99在线免费公开视频| 九九热三级片| 婷婷精品国产欧美精品亚洲人人爽| 国模一区二区三区| 女人喷水视频在线观看| 欧美高清18A片| 久久久久成人网| 色偷综合| 情色五月天久久久| 一区二区日韩欧美久久| 国产女人操逼视频| 人人看人人插| 蜜臀久久99精品久久久久久-DVD原版全| 我中文字幕6区| 少妇天堂网络| 欧美制服另类丝袜| 九九综合久久| 韩国一级做A片免费的| 中国一级特黄大片护士| 日韩av无码网站| 国产熟女无套内射| 情色大香蕉| 久艹99| 欧美大战久久久伊人| 玖玖综合色| 超碰爽人妻熟女Av| 日韩久久三区| 天天日夜夜| 婷婷综合网站| 丁香六月啪| 亚洲Av无码成人精品国产| 亚洲国产婷婷在线播放| 无码一区二区精品视频久久久春药| 国产女人视频三四五区| 91精品国产91熟女| 东京热,男人的天堂| 欧美日韩大黄片| 国产免费黄色一级大片| 网友自拍第一页| 免费视频一二三区| 校园春色五月天| 国产精品96| 在线综合网| 国产精品懂色tv影视免费观看| 天天肏天天干| 国产v亚洲v日韩v欧美v片另类| 玖玖综合网| 偷拍 亚洲 欧美| 超碰色综合| 91P0RNY大屁股人妻| av网站免费线看| 国产精品蜜臀久久久久无码AV| 翔田千里爆乳巨臀无码| 久久久久久久九九九九九九| 国产精品网址| 大香蕉免费乱伦视频| 热99这里只有精品| 91chinese在线| 久久香蕉国产传媒一区剧情天美| 亚洲欧美一区二区三区在钱蜜桃| 99久久无色码| 少妇人妻无码| 97av,com| 欧美亚洲特P| 曰韩中文人妻视频| AV一区观看| 在线观看综合精品亚洲| 婷婷中文字幕| 国产视频一区二区在线| 超碰人妻中文在线| 色香91| 男女啊啊啊啊啊| yaouchengrenav| 国产精品无码av嫩草| 嫩草影院在线观看精品| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 在线精品福利免费播放| 丁香五月成人| 人人超碰在线观看黄| 色偷偷综合91久久噜噜| 高潮精品| 午夜福利视频在线一区| 日本人体九九九九九九| 欲射影视| 猛猛干| 嗯啊视频免费在线观看| 婷婷五月色| 久操操| 国产日本顶级一区二区三区| 欧美性爱精品七区| 插欧洲美女欧美精品| 精品久久99| 中出在线视频| 玖玖爱在线视频免费观看| 日本在线视频导航| AV高清一区| 91精品人妻一品二品三品| 国产操逼视频在线观看| 色五月大香蕉| 国产精品天干天干综合网麻豆| 资源新线在线天堂| 欧美日韩国产高清在线一二三区 | 91成人在线| 精品69网| 国产女生在线| 综合天天网| 老熟女网站| 激情久久av一区av二区av| 在线97在线| 亚洲一二三四区| 最近的最新的中文字幕视频| 东北女人| 免费精品无码一级毛片牛牛影视 | 丁香五月激情综合国产| 亚洲少妇色图自慰直播| 久操免费在线| 六月婷婷综合| 蜜臀aV午夜一区二区三区| 欧美性生活男人的天堂| 激情五月天婷婷| 噜噜瑟| 欧美日韩操操操| 色九九九综合| 久久久久久99AV无码免费网站| 日韩啪啪啪啪啪| 中文字幕福利视频一区二区三区在线观看| 中文字幕,人妻,日韩| 久久久精久久久| 日本精品五区| 亚 欧 美 综合| 高颜值美女口爆高潮浪叫| 天天视频综合在线观看视频| 老鸭窝黄色视频网站| 欧美精品久久久久久久丰满| 天天看片天天爽| 亚洲久9| 亚洲天堂,男人| 91熟女在线| 久久香蕉国产传媒一区剧情天美| 久久久啊啊啊| 狠狠干狠狠色| 91 综合网| 亚洲精品男人的天堂| 综合色91| 九色 人妻 大香蕉| 成人线上超碰| 亚洲色图 欧美热图 清纯唯美 另类自拍| 九月伊人中文字幕| 亚洲日韩AV视色| 91狠狠| 国精品一区二区三| www.亚洲成人一区| 人人澡人人弄| 日本成人电影资源网| 亚洲精品 欧美精品| 国精精品无码一二三区水多多| 人妻天天爽| 久久久免费一级黄片| 另类图片五月天| 天天拍天天操| 一级乱伦网站| 男女激情中文字幕| 亚洲天堂人妻熟妇视频| 日日AAvv| 2020中文字幕在线| 爱做久久久久久| 美女啊啊啊啊啊啊| 人妻天天爽夜夜爽爽| 日小BB小视频| 97精品视频在线播放| www.99在线| 毛片一区二区| 欧美日韩亚洲电影| www.99在线| 91久久久亚洲| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 精品午夜福利国产一区二区在线观看| 欧洲亚洲天堂精品| 91久久久久久| 色吧5亚洲| 久久偷偷色综合蜜桃| 午夜免费视频1000| 曰韩精品视频一区二区| 欧美综合色| 91色黑人少妇| 3p国产色噜噜一区| 亚洲国产精品无码AV久久| 99在线视频播放| 婷婷在线视频| 18禁无码永久免费无限制| 日韩欧美蜜桃精品久久中文字幕久久 | 国产尹人在线视频免费| 翔田千里AV无码秘 三区| 美女丝袜激情小说| 欧美熟爽综合| 激情综合网五月婷婷五月天| 国产美女自拍视频| 天天看高清麻豆| 狠狠干综合| 男人高清无码一区二区| 欧美亚洲情色| 丰满熟妇大乳做爰| 国产精品午夜成人福利| 五月婷在线| 约操熟妇| 亚洲 欧美 日韩 国产一区二区| 亚洲色综网| 久久骚少妇| oumeisetu综合| 国模精品娜娜一二三区| 俄罗斯一区二区视频在线观看| 一区二区视频在看| 欧美大色交| 少妇与黑人高潮在线| 玖玖色综合| 91成人精品在线播放| 中文字幕在线免费观看2| 欧美综合综合| 超碰在线第一页| 男人的天堂VA在线| 色婷婷aV一区二区三区麻豆综合| 动漫爆乳3D奶水一区在线观看| 亚洲日本激情| 亚欧无码线免费观看视频| 国产999精品久久久| 职场同事知名国产国产精品久久欧美日韩| 熟妇人妻一区二区三区| 五月婷婷激情综合| 色牛牛AV| 亚洲色图殴美色图激情乱伦| 亚洲精品性爱片| 亚洲欧美色图小说| 久久天堂| 精品九九九九九| 国产99999| 女生久久网| 欧美操逼录像国产黄色国产| 蜜臀av网址| 嫩草黄页| 久久久九精品| 久久久久久少妇| 欧美高潮| 大但人体久久久久| 伊人久久亚洲色欲综合网站| 成人精品一区二区三区| 岛国人妻少妇av在线观看| 青青草视频在线观看一区二区| 中文字幕一区 二 区 三 四 五 区日 日 骚 | 九九九九热只有精品| www男人天堂| 久操频道免费在线呗看| 大逼色网站| 超碰色老头| 91麻豆天美| 国产精品久久久吖| 日韩中文字幕视频| 久久亚洲欧美中文字幕国语| 亚洲成人性爱网站在线播放| 超碰色男人操熟女| 国产99精品一区二区三区免费| 日韩免费大片一级播放| 曰本人妻人人澡人人夹| 国产三级日产三级韩国三级| 免费人成?大片在线播放| 丁香五月久久| 另类图片五月| 夜夜嗨AV蜜臀av| 欧美性爱网97| 九9精品|