• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    嵌入式處理器P2020機(jī)器碼程序到C語(yǔ)言源程序的溯源方法

    2021-10-20 03:06:14謝文光李琪馬春燕汪克念尹偉張濤
    航空學(xué)報(bào) 2021年9期
    關(guān)鍵詞:代碼指令語(yǔ)法

    謝文光,李琪,馬春燕,*,汪克念,尹偉,張濤

    1. 中國(guó)民航大學(xué) 適航學(xué)院 民航航空器適航審定技術(shù)重點(diǎn)實(shí)驗(yàn)室, 天津 300300

    2. 航空工業(yè)無(wú)線電電子研究所, 上海 200241

    3. 西北工業(yè)大學(xué) 軟件學(xué)院, 西安 710072

    目前,電信、軍事以及工業(yè)嵌入式應(yīng)用領(lǐng)域均要求確保機(jī)器碼程序和C源程序的功能一致性,以防止編譯過(guò)程中插入非C源程序中要求的例外功能,影響嵌入式系統(tǒng)可靠性和安全性[1]。例如民用飛機(jī)機(jī)載軟件通常采用RTCA/DO-178C作為適航符合性方法。對(duì)于A級(jí)軟件(即安全水平最高的研制保證等級(jí)軟件)[2],RTCA/DO-178C要求實(shí)現(xiàn)機(jī)器碼程序到源程序的追溯性。

    PowerPC P2020[3]處理器在航空嵌入式軟件系統(tǒng)和其他嵌入式領(lǐng)域中被廣泛應(yīng)用。C語(yǔ)言應(yīng)用程序需要在PC平臺(tái)X86處理器上通過(guò)C語(yǔ)言編譯器進(jìn)行編譯[4],生成可以在PowerPC P2020處理器上執(zhí)行的機(jī)器碼程序。本文以RTCA/DO-178C中的適航要求[5]作為研究的出發(fā)點(diǎn),以PowerPC P2020處理器的機(jī)器碼程序作為溯源的需求,假設(shè)編譯器在編譯過(guò)程中可能會(huì)插入例外代碼,通過(guò)追溯機(jī)器碼程序和C源程序的溯源關(guān)系,降低安全關(guān)鍵軟件存在的風(fēng)險(xiǎn)和不穩(wěn)定因素。

    目前溯源方法需要程序員人工分析并建立映射關(guān)系,分析難度高、效率低。提升機(jī)器碼程序和C源程序溯源關(guān)系的自動(dòng)化程度是目前研究的熱點(diǎn)之一。Brauer等[6]通過(guò)判斷機(jī)器碼和源代碼的控制流圖是否同構(gòu),提出了一種使用抽象解釋驗(yàn)證部分機(jī)器碼和源代碼可追溯性分析的技術(shù)。Boccardo等[7]利用調(diào)用圖的大小、函數(shù)數(shù)量、控制流圖的頂點(diǎn)和邊的數(shù)量4個(gè)特性,提出了一種使用人工神經(jīng)網(wǎng)絡(luò)來(lái)關(guān)聯(lián)源代碼和機(jī)器碼的方法,但是,該方法實(shí)現(xiàn)的機(jī)器碼的溯源關(guān)系精確性有待提高。文獻(xiàn)[8]采用程序分析技術(shù)建立知識(shí)庫(kù),并對(duì)源代碼進(jìn)行分析,以揭示所使用的變量、算術(shù)操作、邏輯操作、關(guān)系操作和控制結(jié)構(gòu)等參數(shù)。Rapita 公司和GmbH 公司[9-10]分別研制了源碼到機(jī)器碼追溯的可視化工具,靜態(tài)分析C代碼和匯編代碼程序,從分支、函數(shù)、內(nèi)存分配等角度,驗(yàn)證源代碼到機(jī)器碼的追溯關(guān)系。文獻(xiàn)[11]討論了從源代碼到機(jī)器碼追溯涉及的相關(guān)技術(shù),但未給出具體追溯方法。文獻(xiàn)[12]根據(jù)源代碼的典型語(yǔ)法結(jié)構(gòu)及代碼子集,生成源碼、匯編代碼交叉對(duì)照列表,但未給出函數(shù)體中機(jī)器碼和源代碼的代碼行追溯方法。文獻(xiàn)[13]對(duì)惡意代碼可執(zhí)行文件進(jìn)行反匯編及分詞,利用Word2Vec對(duì)反匯編后的十六進(jìn)制碼進(jìn)行矢量化,搭建TextCNN深度學(xué)習(xí)模型進(jìn)行家族譜判定,但該方法僅根據(jù)已有的樣本來(lái)識(shí)別變體,可能導(dǎo)致溯源工作低效甚至無(wú)效。文獻(xiàn)[14]研究目前提出的惡意代碼的溯源技術(shù),指出具有更高級(jí)威脅的惡意代碼檢測(cè)存在缺陷。文獻(xiàn)[15]將源代碼與機(jī)器碼的每一個(gè)語(yǔ)句映射到向量,利用神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu),逐句分析源代碼及機(jī)器碼之間的關(guān)系。文獻(xiàn)[16-17]介紹了一種驗(yàn)證MC68020機(jī)器碼正確性的形式化方法,但是該研究并未涉及浮點(diǎn)型程序的驗(yàn)證。文獻(xiàn)[18]將GCC編譯器源代碼中的函數(shù)分為會(huì)修改輸入數(shù)據(jù)的函數(shù)和不會(huì)修改輸入數(shù)據(jù)的函數(shù),人工對(duì)比輸入輸出數(shù)據(jù)檢測(cè)是否被插入惡意代碼,但效率較低。

    基于以上研究背景,本文提出從文件、函數(shù)名、函數(shù)體代碼行3層次實(shí)現(xiàn)PowerPC P2020處理器機(jī)器碼程序與C源程序之間的溯源方法,與現(xiàn)有工作相比,具有以下優(yōu)點(diǎn):

    1) 方法更具有通用性,適用于不同語(yǔ)言、不同處理器型號(hào)之間溯源關(guān)系的研究,只需將 2.4.1 節(jié)中語(yǔ)言語(yǔ)法結(jié)構(gòu)到匯編語(yǔ)言指令序列映射規(guī)則的定義修改為相關(guān)語(yǔ)言及處理器匯編語(yǔ)言指令序列映射規(guī)則的定義即可。

    2) 方法分析機(jī)器碼代碼行和源碼的溯源關(guān)系時(shí),不局限于機(jī)器碼子集、關(guān)鍵語(yǔ)法特征、分支或函數(shù)等。

    3) 方法可以提升溯源的自動(dòng)化程度,并研制落地的實(shí)驗(yàn)環(huán)境實(shí)現(xiàn)溯源對(duì)比的目標(biāo),節(jié)省人工勞動(dòng)。

    4) 方法利用源代碼和機(jī)器碼之間語(yǔ)法和語(yǔ)義的等價(jià)性原理進(jìn)行溯源,更為精確可靠。

    1 PowerPC P2020機(jī)器碼程序到C語(yǔ)言源程序的溯源需求

    自頂向下分解C語(yǔ)言源碼和PowerPC P2020機(jī)器碼之間的溯源關(guān)系,可將C語(yǔ)言源碼和PowerPC P2020機(jī)器碼之間的映射需求分為3部分:

    1) PowerPC P2020機(jī)器碼文件主名應(yīng)與C語(yǔ)言源碼文件主名溯源。

    在編譯過(guò)程[19]中,編譯器會(huì)根據(jù)C源程序文件主名生成相同主名的PowerPC P2020機(jī)器碼文件。在映射函數(shù)及函數(shù)體前,需要先對(duì)生成的機(jī)器碼文件(.o文件)進(jìn)行檢查,建立文件之間的映射關(guān)系,以防在鏈接時(shí)引入未知的文件模塊。

    2) PowerPC P2020機(jī)器碼文件中函數(shù)名應(yīng)與C語(yǔ)言源碼文件中的函數(shù)名溯源。

    在文件主名一一映射的前提下,需要先對(duì)生成的機(jī)器碼文件中所有的函數(shù)名進(jìn)行檢查,建立函數(shù)名之間的映射關(guān)系,以防在鏈接時(shí)引入未知的函數(shù)模塊。

    3) PowerPC P2020機(jī)器碼文件中的函數(shù)體代碼應(yīng)和C語(yǔ)言源碼文件中的函數(shù)體代碼溯源。

    在文件主名與函數(shù)名一一映射的前提下,對(duì)生成的機(jī)器碼中所有的函數(shù)體進(jìn)行檢查,防止在編譯時(shí)引入未知的代碼行。

    2 PowerPC P2020機(jī)器碼程序到C語(yǔ)言源程序的溯源

    2.1 算法概覽

    論文提出的溯源算法 CodeTraceBack的偽代碼如算法1。根據(jù)第1節(jié)的3層次映射需求,溯源算法CodeTraceBack包括3個(gè)子算法,即文件的溯源子算法、函數(shù)聲明的溯源子算法和函數(shù)體的溯源子算法。

    算法1 溯源算法CodeTraceBack偽代碼

    1) 文件溯源(偽代碼1~25行):C源程序與PowerPC P2020機(jī)器碼程序經(jīng)預(yù)處理模塊處理后,獲取C源程序文件主名列表與PowerPC P2020機(jī)器碼程序文件主名列表,對(duì)比得出C源程序與PowerPC P2020機(jī)器碼程序文件主名的溯源關(guān)系,詳見2.2節(jié)。

    2) 函數(shù)聲明溯源(偽代碼26~62行):通過(guò)遍歷C源程序抽象語(yǔ)法樹[20]獲取函數(shù)名列表;通過(guò)遍歷PowerPC P2020機(jī)器碼程序匯編碼獲取函數(shù)名列表。對(duì)比兩項(xiàng)函數(shù)列表分析得出C源程序與PowerPC P2020機(jī)器碼程序函數(shù)名的溯源關(guān)系,詳見2.3節(jié)。對(duì)于函數(shù)可變參數(shù)的情況或其他錯(cuò)誤情況,如果導(dǎo)致函數(shù)聲明中形式參數(shù)和形式參數(shù)個(gè)數(shù)出現(xiàn)溯源問(wèn)題,由于形式參數(shù)會(huì)在函數(shù)體中的代碼行中使用,函數(shù)體溯源時(shí)會(huì)發(fā)現(xiàn)與機(jī)器碼匯編指令集無(wú)法匹配的問(wèn)題。

    3) 函數(shù)體溯源(偽代碼63~103行):根據(jù)C源程序生成的抽象語(yǔ)法樹,結(jié)合論文定義的抽象語(yǔ)法樹節(jié)點(diǎn)與匯編指令集的映射規(guī)則,生成以函數(shù)為單位的期望匯編指令序列。同時(shí),以函數(shù)為單位獲取機(jī)器碼程序?qū)?yīng)的實(shí)際匯編代碼序列。對(duì)比期望的匯編指令序列和編譯器生成的匯編代碼序列,即可得出C源程序與機(jī)器碼程序函數(shù)體的溯源關(guān)系,詳見2.4節(jié)。

    2.2 PowerPC P2020機(jī)器碼程序文件主名與源文件文件主名溯源

    C源程序與PowerPC P2020機(jī)器碼程序文件主名之間的溯源包括經(jīng)預(yù)處理獲取PowerPC P2020機(jī)器碼程序文件主名名稱、C源程序文件主名名稱、建立追溯關(guān)系3個(gè)步驟。

    1) 針對(duì)PowerPC P2020機(jī)器碼程序,預(yù)處理模塊解析其文件主名,去除文件名后綴,生成機(jī)器碼主名列表,標(biāo)記為targetFileNameSet,對(duì)應(yīng)偽代碼中第3行。

    2) 針對(duì)C源程序,預(yù)處理模塊解析其文件主名,去除文件名后綴,生成源文件主名列表,標(biāo)記為sourceFileNameSet,對(duì)應(yīng)偽代碼中第2行。

    3) 建立targetFileNameSet中文件主名到sourceFileNameSet中文件主名的追溯關(guān)系,標(biāo)記為ResultOfFileName。分析機(jī)器碼文件主名列表targetFileNameSet和源文件列表sourceFileNameSet中的文件主名是否相等。若匹配成功,將該文件主名對(duì)應(yīng)的文件目錄和文件主名存儲(chǔ)在ResultOfFileName中;若匹配失敗,則添加該文件主名至ResultOfFileName中,并標(biāo)注其未能追溯的結(jié)果,對(duì)應(yīng)偽代碼中4~23行。ResultOfFileName表格包含3列,即PowerPC P2020機(jī)器碼程序文件主名所在的目錄、C源程序文件主名所在的目錄、文件主名和結(jié)果標(biāo)注。

    2.3 PowerPC P2020機(jī)器碼程序函數(shù)聲明與源文件函數(shù)聲明的溯源

    C源程序與PowerPC P2020機(jī)器碼程序函數(shù)名之間的溯源分為3個(gè)步驟,包括反匯編機(jī)器碼程序獲取機(jī)器碼函數(shù)名列表、通過(guò)語(yǔ)法分析獲取C源程序函數(shù)名列表,以及對(duì)比獲取機(jī)器碼函數(shù)名列表和C源程序函數(shù)名列表的溯源關(guān)系。

    1) 針對(duì)PowerPC P2020機(jī)器碼程序,生成其所有函數(shù)名列表(偽代碼49~61行)。

    偽代碼第50行通過(guò)編譯器套件中提供的“powerpc-linux-gnu-objdump-t”命令對(duì)PowerPC P2020機(jī)器碼程序進(jìn)行反匯編操作。PowerPC P2020機(jī)器碼程序文件遵循ELF格式,偽代碼51~59行解析PowerPC P2020機(jī)器碼程序ELF格式中的符號(hào)表段(.symtab段),識(shí)別函數(shù)名、函數(shù)名所在的行號(hào)以及該函數(shù)名所在的機(jī)器碼文件主名,構(gòu)造PowerPC P2020機(jī)器碼程序所有函數(shù)聲明的列表targetFuncNameSet(偽代碼第60行)。列表中的每個(gè)元素包括3個(gè)屬性信息:函數(shù)名、行號(hào)、機(jī)器碼文件主名。其中,機(jī)器碼文件主名是2.2節(jié)中機(jī)器碼程序成功映射的文件主名。

    2) 針對(duì)C源程序,基于抽象語(yǔ)法樹生成其所有函數(shù)名列表(偽代碼31~48行)。

    語(yǔ)法分析模塊可以利用開源工具Pycparser或其他自主研制的類似工具,生成C源程序文件的抽象語(yǔ)法樹(偽代碼第44行)。每個(gè)抽象語(yǔ)法樹的節(jié)點(diǎn)包含了語(yǔ)法結(jié)構(gòu)的名稱、子節(jié)點(diǎn)信息及其在C源程序中的行號(hào)信息。偽代碼第46行調(diào)用的getSourceFunc函數(shù)(偽代碼31~42行)遍歷抽象語(yǔ)法樹,搜索抽象語(yǔ)法樹中所有FuncDef節(jié)點(diǎn)(函數(shù)聲明節(jié)點(diǎn)),根據(jù)節(jié)點(diǎn)的屬性信息,構(gòu)造C源程序所有函數(shù)聲明的列表sourceFuncNameSet(偽代碼第47行)。列表中的每個(gè)元素包括3個(gè)屬性信息:函數(shù)名、行號(hào)、源文件主名。其中,源文件主名是2.2節(jié)中機(jī)器碼程序成功映射的文件主名。

    3) 建立PowerPC P2020機(jī)器碼程序函數(shù)名和C源程序函數(shù)名之間的追溯關(guān)系(偽代碼第62行)。

    針對(duì)targetFuncNameSet和sourceFuncNameSet中機(jī)器碼文件主名和源文件主名一致的2個(gè)元素,利用偽代碼中的compareSets函數(shù)計(jì)算這2個(gè)元素的函數(shù)名是否相等。建立PowerPC P2020機(jī)器碼程序函數(shù)名和C源程序函數(shù)名之間的追溯關(guān)系列表,標(biāo)記為ResultOfFuncName,將匹配成功的函數(shù)名信息存入該表格中,表格包含6列,即targetFuncNameSet列表中的每個(gè)元素和sourceFuncNameSet列表中的每個(gè)元素,同時(shí)將未匹配成功的進(jìn)行標(biāo)注。

    2.4 PowerPC P2020機(jī)器碼函數(shù)體代碼與源文件函數(shù)體代碼的溯源

    C源程序與PowerPC P2020機(jī)器碼程序的函數(shù)體之間的溯源分為3個(gè)步驟,包括結(jié)合C源程序?qū)?yīng)的抽象語(yǔ)法樹與映射規(guī)則生成期望匯編指令序列、反匯編機(jī)器碼程序獲取實(shí)際的匯編代碼序列,以及獲取匯編代碼序列和期望匯編指令序列的溯源關(guān)系。其中,確定C源程序抽象語(yǔ)法樹節(jié)點(diǎn)生成期望匯編語(yǔ)言指令序列的規(guī)則是本文的核心關(guān)鍵技術(shù)。

    本文建立了抽象語(yǔ)法樹節(jié)點(diǎn)映射到P2020期望匯編語(yǔ)言指令序列的規(guī)則庫(kù),偽代碼第70行即當(dāng)遍歷到抽象語(yǔ)法樹節(jié)點(diǎn)時(shí)則調(diào)用該規(guī)則庫(kù),利用規(guī)則庫(kù)中抽象語(yǔ)法樹節(jié)點(diǎn)與期望匯編指令序列之間關(guān)系的規(guī)則定義,生成源程序的期望匯編指令序列。2.4.1節(jié)將詳細(xì)闡述該抽象語(yǔ)法樹節(jié)點(diǎn)映射到PowerPC P2020匯編語(yǔ)言指令序列的規(guī)則庫(kù)定義。

    2.4.1 C程序語(yǔ)法結(jié)構(gòu)到PowerPC P2020匯編

    語(yǔ)言指令序列映射規(guī)則的定義

    抽象語(yǔ)法樹節(jié)點(diǎn)包含23類,由于論文篇幅所限,本文僅列出函數(shù)類、流程控制類、跳轉(zhuǎn)類、運(yùn)算類等較為常用的抽象語(yǔ)法樹節(jié)點(diǎn),詳細(xì)闡述它們到PowerPC P2020匯編語(yǔ)言指令序列映射規(guī)則的定義。完整的語(yǔ)法結(jié)構(gòu)、語(yǔ)義及對(duì)應(yīng)的P2020匯編代碼序列的映射規(guī)則上傳https:∥gitee.com/angelavor/cto,便于讀者查看。

    1) 函數(shù)類

    ① 函數(shù)調(diào)用節(jié)點(diǎn)funcCall

    對(duì)于C源程序的抽象語(yǔ)法樹的函數(shù)調(diào)用節(jié)點(diǎn)funcCall,生成的匯編語(yǔ)言指令的規(guī)則為

    (1)若調(diào)用語(yǔ)句中不存在實(shí)參:

    生成一條條件跳轉(zhuǎn)指令:bl。

    (2)若調(diào)用語(yǔ)句中存在實(shí)參:

    (a)識(shí)別C語(yǔ)言函數(shù)調(diào)用語(yǔ)句中的實(shí)參對(duì)應(yīng)的抽象語(yǔ)法樹,遍歷該抽象語(yǔ)法樹的各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列:若參數(shù)類型為整型或者長(zhǎng)整型:lwz;若參數(shù)類型為字符型:lbz、clrlwi、mr;若參數(shù)類型為短整型:lhz、extsh、mr;若參數(shù)類型為浮點(diǎn)型:lwz、efdcfs、evmergehi、mr;若參數(shù)類型為雙精度浮點(diǎn)型:lwz、lwz、mr、mr;若參數(shù)類型為數(shù)組型:addi、mr。

    (b)生成一條函數(shù)調(diào)用指令:crclr addres。

    (c)一條條件跳轉(zhuǎn)指令:bl。

    ② 函數(shù)聲明節(jié)點(diǎn)funcDecl

    對(duì)于C源程序的抽象語(yǔ)法樹的函數(shù)聲明節(jié)點(diǎn)funcDecl,生成的匯編語(yǔ)言指令序列規(guī)則為

    (1)函數(shù)體入口指令序列:stwu、stw、mr。

    (2)識(shí)別C語(yǔ)言函數(shù)體中語(yǔ)句序列對(duì)應(yīng)的抽象語(yǔ)法樹,遍歷該抽象語(yǔ)法樹的各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    (3)函數(shù)體出口指令序列:lwz、mr、blr。

    2) 控制語(yǔ)句相關(guān)節(jié)點(diǎn)

    ① if控制節(jié)點(diǎn)

    對(duì)于C源程序的抽象語(yǔ)法樹的if節(jié)點(diǎn),生成的匯編語(yǔ)言指令序列規(guī)則為

    (1)根據(jù)if語(yǔ)句的判斷條件語(yǔ)句函數(shù)塊信息生成對(duì)應(yīng)的匯編指令序列:

    (a)如果第1個(gè)子樹是constant或者id節(jié)點(diǎn):不添加匯編指令。

    (b)如果第1個(gè)子樹是binaryOp,且binaryOp的兩個(gè)子樹均為constant節(jié)點(diǎn):不添加匯編指令。

    (c)其他情況:遍歷該抽象語(yǔ)法樹,根據(jù)各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    (2)生成1條比較指令:

    (a)如果第1個(gè)子樹是constant或者id節(jié)點(diǎn):不添加匯編指令。

    (b)如果第1個(gè)子樹是binaryOp且binaryOp的兩個(gè)子樹均為constant節(jié)點(diǎn):不添加匯編指令。

    (c)如果第1個(gè)子樹是binaryOp,且binaryOp的判斷條件是“||”,binaryOp的兩個(gè)子樹存在一個(gè)constant節(jié)點(diǎn):不添加匯編指令。

    (d)如果第1個(gè)子樹binaryOp的兩個(gè)子樹節(jié)點(diǎn)均為id:cmpw。

    (e)如果第1個(gè)子樹binaryOp的兩個(gè)子樹有且只有一個(gè)constant節(jié)點(diǎn):cmpwi。

    (3)生成1條條件跳轉(zhuǎn)指令:

    (a)若第1個(gè)子樹是id:beq。

    (b)若第1個(gè)子樹binaryOp的比較符號(hào)為“==”:若變量為浮點(diǎn)型:ble;其他情況:bne。

    (c)若第1個(gè)子樹binaryOp的比較符號(hào)為“!=”:若變量為浮點(diǎn)型:bgt;其他情況:beq。

    (d)若第1個(gè)子樹binaryOp的比較符號(hào)為“>=”:若均為變量且變量均為浮點(diǎn)型:ble;若均為變量:blt;若存在一個(gè)常量(即其他情況):ble。

    (e)若第1個(gè)子樹binaryOp的比較符號(hào)為“>”:ble。

    (f)若第1個(gè)子樹binaryOp的比較符號(hào)為“<=”:若變量為浮點(diǎn)型:ble;其他情況:bgt。

    (g)若第1個(gè)子樹binaryOp的比較符號(hào)為“<”:若均為變量且變量均為浮點(diǎn)型:ble;若均為變量:bge;若存在一個(gè)常量(即其他情況):bgt。

    (4)根據(jù)if語(yǔ)句條件為true情況下函數(shù)塊信息生成對(duì)應(yīng)的匯編指令序列:遍歷該抽象語(yǔ)法樹,根據(jù)各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    (5)若存在第3個(gè)子樹else函塊,則生成1條無(wú)條件跳轉(zhuǎn)指令:b。

    (6)根據(jù)if語(yǔ)句條件為false情況下函數(shù)塊信息生成對(duì)應(yīng)的匯編指令:遍歷該抽象語(yǔ)法樹,根據(jù)各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    圖1給出了if節(jié)點(diǎn)翻譯為匯編指令序列排列的邏輯原理。

    圖1 if節(jié)點(diǎn)映射規(guī)則圖Fig.1 Diagram of correspondece of if node to rule

    ② for循環(huán)節(jié)點(diǎn)

    對(duì)于C源程序的抽象語(yǔ)法樹的for節(jié)點(diǎn),簡(jiǎn)式標(biāo)記為“for(A;B;C){D}”,生成的匯編語(yǔ)言指令序列規(guī)則為

    (1)根據(jù)代碼塊A信息生成對(duì)應(yīng)的匯編指令序列:

    (a)A為變量:lwz。

    (b)A為其他數(shù)據(jù)類型:根據(jù)A節(jié)點(diǎn)類型對(duì)應(yīng)的規(guī)則生成程序塊A對(duì)應(yīng)的匯編指令序列。

    (2)一條跳轉(zhuǎn)指令:b。

    (3)若存在代碼塊D:根據(jù)D節(jié)點(diǎn)類型對(duì)應(yīng)的規(guī)則生成程序塊D對(duì)應(yīng)的匯編指令序列;否則不產(chǎn)生匯編指令。

    (4)若存在代碼塊C:根據(jù)C節(jié)點(diǎn)類型對(duì)應(yīng)的規(guī)則生成代碼塊C對(duì)應(yīng)的匯編指令序列。

    (5)若存在代碼塊B:根據(jù)B節(jié)點(diǎn)類型對(duì)應(yīng)的規(guī)則生成代碼塊B對(duì)應(yīng)的匯編指令序列。

    3) 跳轉(zhuǎn)類節(jié)點(diǎn)

    ① 返回節(jié)點(diǎn)return

    對(duì)于C源程序的抽象語(yǔ)法樹的return節(jié)點(diǎn),生成的匯編語(yǔ)言指令序列規(guī)則為

    根據(jù)函數(shù)體返回類型信息生成對(duì)應(yīng)的匯編語(yǔ)言指令序列:

    (1)若函數(shù)體返回類型為void:

    (a)若返回值為空:li、stw。

    (b)若返回值不為空:不添加匯編指令。

    (2)若函數(shù)體返回類型為整型:

    (a)若返回值為常量:li。

    (b)返回值為變量:lwz。

    (3)若函數(shù)體返回類型為字符型:lbz,clrlwi。

    (4)若函數(shù)體返回類型為浮點(diǎn)型:lwz,mtctr。

    ② 循環(huán)終止節(jié)點(diǎn)break

    對(duì)于C源程序的抽象語(yǔ)法樹的break節(jié)點(diǎn),規(guī)則為生成一條b指令,表示無(wú)條件跳轉(zhuǎn)。

    4) 運(yùn)算類節(jié)點(diǎn)

    ① 二元運(yùn)算符binaryOp

    對(duì)于C源程序的抽象語(yǔ)法樹的binaryOp節(jié)點(diǎn),簡(jiǎn)式為:“A?B”。其中“?”代表“>”“ < ”“ ==”“!=”“ +”“ -”“ *”“/”等運(yùn)算符號(hào)。生成的匯編語(yǔ)言指令序列步驟為:

    步驟1識(shí)別binaryOp節(jié)點(diǎn)中存儲(chǔ)的運(yùn)算符,如果是“>”“ <”“ ==”“ !=”則跳轉(zhuǎn)至步驟2,執(zhí)行步驟2~步驟4;如果為“+”“ -”“ *”“/”則跳轉(zhuǎn)至步驟5~步驟7。

    步驟2識(shí)別程序中B對(duì)應(yīng)的抽象語(yǔ)法樹,遍歷該抽象語(yǔ)法樹的各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    步驟3識(shí)別程序中A對(duì)應(yīng)的抽象語(yǔ)法樹,遍歷該抽象語(yǔ)法樹的各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    步驟4一條比較指令cmpw。

    步驟5識(shí)別程序中A對(duì)應(yīng)的抽象語(yǔ)法樹,遍歷該抽象語(yǔ)法樹的各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    步驟6識(shí)別程序中B對(duì)應(yīng)的抽象語(yǔ)法樹,遍歷該抽象語(yǔ)法樹的各個(gè)節(jié)點(diǎn)類型,生成相應(yīng)的匯編語(yǔ)言指令序列。

    步驟7識(shí)別binaryOp節(jié)點(diǎn)中存儲(chǔ)的運(yùn)算符,如果是“+”則添加一條add指令;如果是“-”則添加一條subf指令;如果是“*”則添加一條mullw指令;如果是“/”則添加一條divw指令。

    ② 單目運(yùn)算節(jié)點(diǎn)unaryOp

    C源程序中單目運(yùn)算符生成匯編語(yǔ)言指令集合的規(guī)則。對(duì)于C源程序的抽象語(yǔ)法樹的unaryOp節(jié)點(diǎn),簡(jiǎn)式為:“a++”“ --a”“ &a”“ -a”“ !a”“ ~a”“ *a”,生成的匯編語(yǔ)言指令序列應(yīng)為:

    步驟1識(shí)別unaryOp節(jié)點(diǎn)中存儲(chǔ)的運(yùn)算符,若為“*”或“&”,直接跳轉(zhuǎn)至步驟4。

    步驟2一條lwz指令,用于將a加載進(jìn)寄存器。

    步驟3識(shí)別unaryOp節(jié)點(diǎn)中存儲(chǔ)的運(yùn)算符,如果為“++”“--”則添加一條add指令,它是“addi”和“add”的統(tǒng)一表示,用于進(jìn)行自增自減運(yùn)算;如果為“-”,增添一條neg指令;若為“~”,增添一條not指令;若為“!”,不處理。

    步驟4一條st指令,用于將寄存器中的結(jié)果加載到棧中。

    2.4.2 建立PowerPC P2020機(jī)器碼程序函數(shù)體語(yǔ)句序列與C源程序函數(shù)體語(yǔ)句之間的追溯關(guān)系

    基于2.4.1節(jié)中 C程序語(yǔ)法結(jié)構(gòu)到PowerPC P2020匯編語(yǔ)言指令序列映射規(guī)則的定義,建立函數(shù)體之間的追溯關(guān)系分以下3個(gè)步驟。

    1) 針對(duì)于C源程序,利用pycpaser開源庫(kù)生成其抽象語(yǔ)法樹ast(偽代碼第50行)。偽代碼95~102行通過(guò)遍歷ast的抽象語(yǔ)法樹節(jié)點(diǎn),并結(jié)合2.4.1節(jié)中構(gòu)建的規(guī)則庫(kù)生成期望匯編指令序列,并以函數(shù)體為單位將生成的期望指令序列存儲(chǔ)在sourceFuncAssemSet數(shù)組中。期望匯編指令序列中子項(xiàng)的節(jié)點(diǎn)格式為[cmd, coord],其中cmd存儲(chǔ)期望匯編語(yǔ)言指令序列助記符,coord中存儲(chǔ)對(duì)應(yīng)C源程序中的代碼行號(hào)信息。

    2) 針對(duì)PowerPC P2020機(jī)器碼程序,偽代碼第50行利用“powerpc-linux-gnu-objdump-d-lfilename”命令解析機(jī)器碼程序文件,提取出函數(shù)名、匯編語(yǔ)言指令序列以及對(duì)應(yīng)C源程序中的代碼行號(hào)信息。偽代碼第70~94行以函數(shù)體為單位,將編譯器生成的相應(yīng)函數(shù)的匯編語(yǔ)言指令序列存儲(chǔ)在targetFuncAssemSet數(shù)組中。

    3)建立PowerPC P2020機(jī)器碼程序函數(shù)體語(yǔ)句序列與C源程序函數(shù)體語(yǔ)句之間的追溯關(guān)系:

    ① 為方便計(jì)算其匹配率,算法將每一個(gè)匯編指令用唯一的ASCII碼值替換,并保存匯編指令與ASCII碼轉(zhuǎn)換的映射字符表(偽代碼第103行)。

    ② 對(duì)比實(shí)際匯編指令序列以及期望匯編指令序列對(duì)應(yīng)的字符串,若完全匹配,則匹配率為100%;若存在不匹配的字符,則匹配率為匹配的字符個(gè)數(shù)/字符總個(gè)數(shù)。

    ③ 根據(jù)映射字符表,回溯對(duì)應(yīng)的匯編指令。字符串中互相匹配的字符即為實(shí)際匯編指令序列與期望的匯編指令序列中互相匹配的匯編指令。

    2.5 庫(kù)函數(shù)的溯源

    1) 動(dòng)態(tài)鏈接庫(kù)函數(shù)的溯源。對(duì)于動(dòng)態(tài)鏈接的庫(kù)函數(shù),首先需要存放常用動(dòng)態(tài)鏈接庫(kù)的源碼,當(dāng)ELF文件頭中表明所依賴動(dòng)態(tài)鏈接庫(kù)時(shí),需要根據(jù)對(duì)應(yīng)動(dòng)態(tài)鏈接庫(kù)的源碼,按照2.4節(jié)機(jī)器碼文件函數(shù)體代碼與源文件函數(shù)體代碼的映射方法進(jìn)行匹配即可,以驗(yàn)證該動(dòng)態(tài)鏈接庫(kù)是否存在問(wèn)題。

    2) 靜態(tài)鏈接庫(kù)函數(shù)的溯源。當(dāng)機(jī)器碼文件函數(shù)體內(nèi)部存在連續(xù)的匯編代碼行不能與期望匯編指令序列匹配時(shí),需要驗(yàn)證該段代碼是否為直接展開的庫(kù)函數(shù)。對(duì)于直接展開的庫(kù)函數(shù),需要預(yù)先加載當(dāng)前C源程序引用的函數(shù)庫(kù)。匹配方法與2.4節(jié)函數(shù)體匹配相似,但不需要建立C程序語(yǔ)法結(jié)構(gòu)到PowerPC P2020匯編語(yǔ)言指令序列映射規(guī)則,只需要對(duì)展開前函數(shù)庫(kù)的二進(jìn)制代碼進(jìn)行反匯編作為期望匯編指令序列,然后與機(jī)器碼文件中未能匹配的連續(xù)匯編代碼行(即內(nèi)嵌的庫(kù)函數(shù))進(jìn)行匹配即可,以驗(yàn)證編譯器是否在靜態(tài)鏈接時(shí)對(duì)匯編指令進(jìn)行修改。

    3 實(shí)驗(yàn)驗(yàn)證

    3.1 實(shí)驗(yàn)環(huán)境搭建

    本文采用ubuntu20.04和python3.8,根據(jù)圖2的實(shí)驗(yàn)流程,編程實(shí)現(xiàn)用于實(shí)驗(yàn)驗(yàn)證的實(shí)驗(yàn)環(huán)境(命名為:NwpuSrcTrace)。NwpuSrcTrace以C源程序文件和PowerPC P2020機(jī)器碼文件作為輸入,通過(guò)可視化界面輸出機(jī)器碼和C源程序在文件、函數(shù)聲明和函數(shù)體代碼的追溯結(jié)果。

    圖2 實(shí)驗(yàn)驗(yàn)證流程Fig.2 Experimental verification process

    3.2 測(cè)試用例

    1) 文件主名溯源測(cè)試用例

    為驗(yàn)證文件溯源方法的有效性,論文設(shè)計(jì)了245個(gè)C源程序文件和與345個(gè)PowerPC P2020機(jī)器碼文件,其中100個(gè)機(jī)器碼文件設(shè)計(jì)為無(wú)法匹配到C語(yǔ)言源文件。

    2) 函數(shù)名溯源測(cè)試用例

    為驗(yàn)證函數(shù)聲明溯源方法的有效性,論文設(shè)計(jì)了1 111個(gè)C語(yǔ)言函數(shù)聲明與1 273個(gè)PowerPC P2020機(jī)器碼函數(shù)聲明,其中162個(gè)機(jī)器碼函數(shù)聲明無(wú)法找到對(duì)應(yīng)的C語(yǔ)言源文件中的函數(shù)聲明。

    3) 函數(shù)體溯源測(cè)試用例

    為驗(yàn)證函數(shù)體代碼溯源的有效性,論文覆蓋C語(yǔ)言程序的23類抽象語(yǔ)法樹節(jié)點(diǎn),分別設(shè)計(jì)了20個(gè)C源程序文件和相應(yīng)的20個(gè)PowerPC P2020機(jī)器碼程序文件,共計(jì)460個(gè)測(cè)試用例進(jìn)行函數(shù)體代碼溯源實(shí)驗(yàn)。表1列舉了函數(shù)聲明decl、if、for和while等部分抽象語(yǔ)法樹節(jié)點(diǎn)對(duì)應(yīng)的C源程序測(cè)試用例。為便于讀者查看完整的測(cè)試用例,詳見https:∥gitee.com/angelavor/cto。

    表1 部分節(jié)點(diǎn)C源程序?qū)嶒?yàn)對(duì)象

    3.3 實(shí)驗(yàn)步驟

    1) 導(dǎo)入源文件和機(jī)器碼文件

    將C源程序文件存儲(chǔ)在指定文件夾中,利用風(fēng)河Workbench嵌入式開發(fā)平臺(tái)GCC編譯器(航空領(lǐng)域應(yīng)用常用編譯器)對(duì)C源程序文件進(jìn)行編譯,得到對(duì)應(yīng)的PowerPC P2020機(jī)器碼程序文件,并存儲(chǔ)在相應(yīng)工程文件夾中。運(yùn)行實(shí)驗(yàn)環(huán)境NwpuSrcTrace中的home.py程序,啟動(dòng)可視化界面,導(dǎo)入C源程序文件與PowerPC P2020機(jī)器碼程序文件。

    2) 機(jī)器碼文件溯源

    點(diǎn)擊溯源菜單, “文件主名溯源”“函數(shù)名溯源”和“函數(shù)體溯源”功能可以分別輸出文件名(如圖3所示)、函數(shù)名(如圖4所示)和函數(shù)體代碼(如圖5所示)的追溯清單。

    文件主名溯源界面(圖3)中,上方為源文件列表與機(jī)器碼文件列表。下方的文件主名溯源結(jié)果顯示匹配信息與文件主名。

    圖3 文件溯源結(jié)果輸出界面Fig.3 File traceability output interface

    函數(shù)名溯源界面(圖4)中,右側(cè)上方顯示為機(jī)器碼函數(shù)的匯編指令列表。下方的函數(shù)名溯源結(jié)果顯示匹配信息、函數(shù)名以及函數(shù)所在文件主名。

    圖4 函數(shù)聲明溯源結(jié)果輸出界面Fig.4 Output interface of function definition tracing results

    函數(shù)體溯源界面(圖5)中,右側(cè)上方為機(jī)器碼函數(shù)對(duì)應(yīng)的匯編指令列表。界面下方的函數(shù)體溯源結(jié)果顯示以函數(shù)體為單位的匹配率。

    圖5 函數(shù)體溯源結(jié)果輸出界面Fig.5 Output interface of function body tracing results

    3.4 實(shí)驗(yàn)結(jié)果分析

    1) 文件溯源結(jié)果

    圖6為系統(tǒng)導(dǎo)出的共590個(gè)文件溯源結(jié)果的部分截圖,其中包括匹配成功/失敗信息、C源程序文件主名信息和PowerPC P2020程序文件主名信息。目前文件主名溯源方法已達(dá)到100%準(zhǔn)確率。

    圖6 文件溯源測(cè)試結(jié)果展示Fig.6 Display of file traceability test results

    2) 函數(shù)聲明溯源結(jié)果

    圖7為系統(tǒng)導(dǎo)出的共2 384個(gè)函數(shù)名溯源方法的部分測(cè)試結(jié)果,其中包括匹配成功/失敗信息、該函數(shù)名所在C源程序文件主名或該函數(shù)名所在PowerPC P2020程序文件主名信息。目前函數(shù)聲明溯源已達(dá)到100%的準(zhǔn)確率。

    圖7 函數(shù)名溯源測(cè)試結(jié)果展示Fig.7 Display of function name traceability test results

    3) 函數(shù)體代碼行溯源結(jié)果

    表2給出了覆蓋23類抽象語(yǔ)法樹節(jié)點(diǎn)的C程序溯源測(cè)試結(jié)果:第1列為抽象語(yǔ)法樹節(jié)點(diǎn),第2列為節(jié)點(diǎn)含義的描述,第3列為測(cè)試用例介紹,第4列為C語(yǔ)言函數(shù)體與機(jī)器碼函數(shù)體部分代碼示例,第5列為函數(shù)體代碼溯源的匹配率。實(shí)驗(yàn)結(jié)果表明,除少數(shù)節(jié)點(diǎn)類型匹配率較低外,其余節(jié)點(diǎn)的匹配率較高,函數(shù)體代碼的平均成功匹配率為97.22%。匹配率低的節(jié)點(diǎn)涉及到復(fù)雜數(shù)據(jù)類型,如長(zhǎng)整型long、浮點(diǎn)型float和雙精度浮點(diǎn)型double。編譯器對(duì)浮點(diǎn)和雙精度數(shù)據(jù)類型的處理是動(dòng)態(tài)的并依賴于計(jì)算機(jī)的硬件環(huán)境,同時(shí)編譯器會(huì)對(duì)部分運(yùn)算進(jìn)行合并優(yōu)化操作。例如:針對(duì)“b=a*2”語(yǔ)句,根據(jù)抽象語(yǔ)法樹節(jié)點(diǎn)對(duì)應(yīng)規(guī)則,BinaryOp節(jié)點(diǎn)的運(yùn)算符號(hào)為“*”,對(duì)應(yīng)的匯編語(yǔ)言指令為“mullw”,但是在實(shí)際編譯過(guò)程中,編譯器會(huì)將其編譯為加法運(yùn)算,即“+”對(duì)應(yīng)的“addi”指令。這些情況會(huì)導(dǎo)致匹配度無(wú)法到達(dá)預(yù)期的情況,仍需要人工對(duì)溯源結(jié)果進(jìn)行審核。

    表2 函數(shù)體代碼行的溯源測(cè)試結(jié)果Table 2 Traceability test results for function body code

    實(shí)驗(yàn)環(huán)境NwpuSrcTrace可以實(shí)現(xiàn)自動(dòng)化溯源文件、函數(shù)聲明和函數(shù)體代碼,能較好地實(shí)現(xiàn)C源碼和編譯后PowerPC P2020機(jī)器碼的可追溯性,詳細(xì)展示機(jī)器碼和源碼的匹配情況,縮減人工追溯C源碼和編譯后的PowerPC P2020機(jī)器碼關(guān)系的時(shí)間與經(jīng)濟(jì)成本。

    4 結(jié)論和展望

    本文提出了一種由PowerPC P2020處理器平臺(tái)的機(jī)器碼工程文件到C語(yǔ)言源代碼工程文件的追溯性分析方法,用戶可以從文件映射、函數(shù)聲明映射、函數(shù)體模塊映射3個(gè)方面獲取PowerPC P2020機(jī)器碼工程文件到C源代碼工程文件的追溯關(guān)系,函數(shù)體代碼的平均追溯匹配率達(dá)97.22%,文件和函數(shù)聲明溯源的追溯匹配率達(dá)100%。

    續(xù)表7

    續(xù)表7

    本文研究目標(biāo)是驗(yàn)證編譯器在編譯過(guò)程中是否插入異常代碼,在工程實(shí)踐過(guò)程中,可以將得到機(jī)器碼程序的過(guò)程分為編譯過(guò)程、驗(yàn)證過(guò)程、裁剪過(guò)程等3個(gè)過(guò)程。在編譯過(guò)程中,通過(guò)參數(shù)控制編譯器生成帶符號(hào)表的ELF文件,即本文中的.o文件。在驗(yàn)證過(guò)程中,使用本文所述方法驗(yàn)證生成程序的正確性。在裁剪過(guò)程中,使用裁剪工具對(duì)驗(yàn)證后的程序進(jìn)行裁剪。因?yàn)椴眉暨^(guò)程是在追溯機(jī)器碼程序的正確性后再進(jìn)行,因此在資源受限的嵌入式領(lǐng)域,生成的二進(jìn)制文件即使經(jīng)過(guò)裁剪,以及溯源所用的符號(hào)表可能會(huì)被刪除,也不會(huì)影響到本文的驗(yàn)證方法。所以本文方法在實(shí)踐中是可行的。

    在現(xiàn)有成果的基礎(chǔ)上,未來(lái)可以從以下4個(gè)方面繼續(xù)進(jìn)行深入研究:

    1) 針對(duì)浮點(diǎn)數(shù)和雙精度帶來(lái)的部分節(jié)點(diǎn)匹配率低問(wèn)題,未來(lái)將通過(guò)分析源碼、存儲(chǔ)符號(hào)及類型的辦法解決。

    2) 目前實(shí)驗(yàn)結(jié)果是覆蓋23類抽象語(yǔ)法樹節(jié)點(diǎn)的C程序單元測(cè)試的溯源,未來(lái)工作采用嵌入式航空領(lǐng)域包含C語(yǔ)言復(fù)雜嵌套數(shù)據(jù)結(jié)構(gòu)的常用函數(shù)庫(kù)和相關(guān)開源軟件作為集成測(cè)試集,對(duì)提出的方法進(jìn)行集成測(cè)試,進(jìn)一步驗(yàn)證方法的有效性。

    3) 在C程序語(yǔ)義分析的基礎(chǔ)上進(jìn)一步探索不同編譯優(yōu)化選項(xiàng)影響下的代碼溯源問(wèn)題。目前編譯器的優(yōu)化選項(xiàng)有O0、O1、O2、O3、Os 這5種,編譯器默認(rèn)使用的是O2優(yōu)化選項(xiàng),本文的實(shí)驗(yàn)結(jié)論也是基于O2優(yōu)化選項(xiàng)。如果修改優(yōu)化選項(xiàng),會(huì)對(duì)論文目前的實(shí)驗(yàn)結(jié)果產(chǎn)生一定的影響,對(duì)于修改優(yōu)化選項(xiàng)后未能溯源的代碼,需要通過(guò)人工方式進(jìn)行溯源分析。本文方法仍能輔助人工完成大部分機(jī)器碼溯源任務(wù),降低全部機(jī)器碼溯源所花費(fèi)的時(shí)間,滿足機(jī)載軟件適航要求。

    4) C/C++是目前機(jī)載軟件開發(fā)的主要語(yǔ)言選擇項(xiàng),后續(xù)將針對(duì)C/C++中更復(fù)雜的嵌套數(shù)據(jù)結(jié)構(gòu)和函數(shù),開展進(jìn)一步研究,并根據(jù)實(shí)驗(yàn)環(huán)境已留出的選擇不同處理器及編程語(yǔ)言的開放接口,使提出的溯源方法推廣適配到其他平臺(tái)處理器以及C++編程語(yǔ)言。

    猜你喜歡
    代碼指令語(yǔ)法
    聽我指令:大催眠術(shù)
    跟蹤導(dǎo)練(二)4
    KEYS
    ARINC661顯控指令快速驗(yàn)證方法
    LED照明產(chǎn)品歐盟ErP指令要求解讀
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    創(chuàng)世代碼
    Keys
    一级爰片在线观看| 欧美高清性xxxxhd video| 国产精品久久久久久久久免| 欧美成人精品欧美一级黄| 亚洲美女搞黄在线观看| 精品人妻一区二区三区麻豆| 午夜免费观看性视频| 国产欧美亚洲国产| 男女免费视频国产| 日韩制服骚丝袜av| 高清不卡的av网站| 免费看日本二区| 亚洲人成网站在线观看播放| 午夜日本视频在线| 黑人猛操日本美女一级片| 最近手机中文字幕大全| 国产成人精品一,二区| 久久国产精品大桥未久av | 国产成人91sexporn| 国产av国产精品国产| 三级国产精品片| 80岁老熟妇乱子伦牲交| 日日啪夜夜撸| 亚洲精品国产色婷婷电影| av女优亚洲男人天堂| 在线观看一区二区三区激情| 欧美三级亚洲精品| 国产精品免费大片| 免费在线观看成人毛片| 欧美老熟妇乱子伦牲交| 蜜臀久久99精品久久宅男| 一级a做视频免费观看| 热99国产精品久久久久久7| 久久精品国产亚洲av天美| 国产精品一区二区三区四区免费观看| 国产精品av视频在线免费观看| 久久综合国产亚洲精品| 特大巨黑吊av在线直播| 久久女婷五月综合色啪小说| 中国三级夫妇交换| 五月天丁香电影| 免费黄频网站在线观看国产| 国产免费一级a男人的天堂| 日韩中文字幕视频在线看片 | 成人毛片60女人毛片免费| 777米奇影视久久| 国产在视频线精品| 男人添女人高潮全过程视频| 亚洲精品亚洲一区二区| 综合色丁香网| 熟妇人妻不卡中文字幕| 大陆偷拍与自拍| 一区二区av电影网| 一区二区三区乱码不卡18| 亚洲精品一区蜜桃| 日本黄大片高清| 亚洲精品色激情综合| 国产精品一区二区性色av| 国产欧美另类精品又又久久亚洲欧美| a 毛片基地| h视频一区二区三区| 成人毛片a级毛片在线播放| 久久久国产一区二区| 国产老妇伦熟女老妇高清| 国产色婷婷99| 午夜福利在线在线| 久久影院123| 青春草国产在线视频| 欧美+日韩+精品| 黄片无遮挡物在线观看| 美女福利国产在线 | 国产精品成人在线| 日韩成人av中文字幕在线观看| 亚洲av综合色区一区| 亚洲在久久综合| 精品人妻视频免费看| 黄色怎么调成土黄色| 欧美成人精品欧美一级黄| 色综合色国产| 国产一区亚洲一区在线观看| 最近的中文字幕免费完整| 国产又色又爽无遮挡免| av国产免费在线观看| 一区二区三区四区激情视频| 精品亚洲乱码少妇综合久久| 精品国产露脸久久av麻豆| 亚洲国产精品专区欧美| 亚洲欧美中文字幕日韩二区| kizo精华| av播播在线观看一区| 人人妻人人添人人爽欧美一区卜 | freevideosex欧美| 日韩成人av中文字幕在线观看| 亚洲av不卡在线观看| .国产精品久久| 亚洲av.av天堂| 美女cb高潮喷水在线观看| 国产亚洲av片在线观看秒播厂| 18+在线观看网站| 丰满少妇做爰视频| 国产精品嫩草影院av在线观看| 啦啦啦啦在线视频资源| av在线app专区| h视频一区二区三区| 久久女婷五月综合色啪小说| 免费人妻精品一区二区三区视频| 亚洲自偷自拍三级| 久久国产亚洲av麻豆专区| 免费黄色在线免费观看| 观看免费一级毛片| 国产伦在线观看视频一区| 三级国产精品欧美在线观看| 色婷婷av一区二区三区视频| 视频中文字幕在线观看| 国产黄色视频一区二区在线观看| 国产色爽女视频免费观看| 伦理电影大哥的女人| 亚洲一区二区三区欧美精品| 伦理电影大哥的女人| 97在线人人人人妻| 免费少妇av软件| 亚洲成色77777| 亚洲成人中文字幕在线播放| 有码 亚洲区| 成人无遮挡网站| 国产一级毛片在线| 午夜视频国产福利| 免费观看在线日韩| 亚洲av成人精品一二三区| 欧美性感艳星| 麻豆成人午夜福利视频| 乱码一卡2卡4卡精品| 久久鲁丝午夜福利片| 久久99精品国语久久久| 免费av中文字幕在线| 国产中年淑女户外野战色| 亚洲欧美日韩东京热| 亚洲怡红院男人天堂| 久久国内精品自在自线图片| 午夜视频国产福利| 国产成人91sexporn| 成年人午夜在线观看视频| 免费看不卡的av| 美女主播在线视频| 亚洲欧美中文字幕日韩二区| 亚洲欧美日韩东京热| 色吧在线观看| 免费看日本二区| 99视频精品全部免费 在线| 2018国产大陆天天弄谢| 99热这里只有是精品在线观看| www.av在线官网国产| 久久久久久伊人网av| 黄色视频在线播放观看不卡| 亚洲欧美日韩东京热| 中国三级夫妇交换| 香蕉精品网在线| 美女脱内裤让男人舔精品视频| 一级a做视频免费观看| 免费看日本二区| 全区人妻精品视频| 青春草亚洲视频在线观看| 亚洲精品国产av蜜桃| 亚洲国产高清在线一区二区三| 91久久精品国产一区二区三区| 国产v大片淫在线免费观看| 国产黄片美女视频| 国产男女内射视频| 欧美高清性xxxxhd video| 在线看a的网站| 在线观看美女被高潮喷水网站| 亚洲av在线观看美女高潮| 我的老师免费观看完整版| 国产综合精华液| 亚洲国产精品国产精品| 只有这里有精品99| 国产老妇伦熟女老妇高清| 亚洲,欧美,日韩| 色吧在线观看| 亚洲国产成人一精品久久久| 国产乱人视频| 亚洲,一卡二卡三卡| videos熟女内射| 男女啪啪激烈高潮av片| 久久韩国三级中文字幕| 中文资源天堂在线| 免费不卡的大黄色大毛片视频在线观看| 日韩 亚洲 欧美在线| 亚洲最大成人中文| 欧美少妇被猛烈插入视频| 国产精品蜜桃在线观看| 大话2 男鬼变身卡| 亚洲aⅴ乱码一区二区在线播放| 一个人看的www免费观看视频| 色吧在线观看| 如何舔出高潮| 日韩人妻高清精品专区| 好男人视频免费观看在线| 日韩电影二区| 国产精品秋霞免费鲁丝片| 黄色视频在线播放观看不卡| 久久久久久久久久人人人人人人| 一级毛片久久久久久久久女| 联通29元200g的流量卡| 亚洲美女视频黄频| 97精品久久久久久久久久精品| 国产精品一区二区三区四区免费观看| 久久ye,这里只有精品| 丝瓜视频免费看黄片| 男女啪啪激烈高潮av片| av不卡在线播放| 亚洲精品一二三| 日韩人妻高清精品专区| av卡一久久| 涩涩av久久男人的天堂| 日本-黄色视频高清免费观看| 精品久久久久久久久av| 国产大屁股一区二区在线视频| 成人毛片a级毛片在线播放| 免费观看无遮挡的男女| 亚洲欧美成人精品一区二区| 亚洲精品色激情综合| 国产一级毛片在线| 汤姆久久久久久久影院中文字幕| 亚洲精品日本国产第一区| 看免费成人av毛片| 亚洲欧洲日产国产| 丝袜喷水一区| 视频区图区小说| 免费黄色在线免费观看| 纵有疾风起免费观看全集完整版| 欧美成人一区二区免费高清观看| 亚洲在久久综合| 少妇的逼好多水| 亚洲人成网站在线播| 亚洲精品自拍成人| 在线 av 中文字幕| 精品国产露脸久久av麻豆| 天美传媒精品一区二区| 免费看不卡的av| 97超视频在线观看视频| 亚洲国产成人一精品久久久| 国产精品成人在线| 丰满少妇做爰视频| 国产亚洲av片在线观看秒播厂| 亚洲精品456在线播放app| 人妻系列 视频| 亚洲av中文字字幕乱码综合| 男女边摸边吃奶| 99九九线精品视频在线观看视频| 免费人成在线观看视频色| 少妇丰满av| 免费黄色在线免费观看| 日本黄大片高清| 国产成人a∨麻豆精品| 免费少妇av软件| 久久热精品热| 国产黄片美女视频| 久久久久久久久久成人| 黄片无遮挡物在线观看| 国产 精品1| 国产成人精品福利久久| 欧美一区二区亚洲| 亚洲人成网站在线观看播放| 色哟哟·www| 久久精品国产鲁丝片午夜精品| av在线观看视频网站免费| 亚洲国产最新在线播放| 女性生殖器流出的白浆| 日本爱情动作片www.在线观看| 久久久精品免费免费高清| 精品一区二区免费观看| 久久久久久久国产电影| 最黄视频免费看| 人妻系列 视频| 我的老师免费观看完整版| 久久午夜福利片| 97超碰精品成人国产| 各种免费的搞黄视频| 欧美日韩亚洲高清精品| 91aial.com中文字幕在线观看| 麻豆成人午夜福利视频| 在线看a的网站| 97热精品久久久久久| 伊人久久精品亚洲午夜| 久久综合国产亚洲精品| 国产伦理片在线播放av一区| 激情五月婷婷亚洲| 国产av一区二区精品久久 | 国产在视频线精品| 波野结衣二区三区在线| 久久 成人 亚洲| 91精品一卡2卡3卡4卡| 欧美精品国产亚洲| 又黄又爽又刺激的免费视频.| 一区在线观看完整版| 亚洲精品成人av观看孕妇| 午夜福利在线观看免费完整高清在| 啦啦啦视频在线资源免费观看| 中文资源天堂在线| 久久影院123| av专区在线播放| 国产欧美另类精品又又久久亚洲欧美| 国产久久久一区二区三区| 国产一区二区三区av在线| 日韩 亚洲 欧美在线| 日本黄大片高清| 一级毛片我不卡| 三级经典国产精品| 久久99热这里只频精品6学生| 赤兔流量卡办理| 日韩中文字幕视频在线看片 | 丰满乱子伦码专区| 又黄又爽又刺激的免费视频.| 99久久精品热视频| 丝瓜视频免费看黄片| 精华霜和精华液先用哪个| 国产亚洲一区二区精品| 精品人妻偷拍中文字幕| 国产黄色视频一区二区在线观看| 三级国产精品欧美在线观看| 精品一区二区三区视频在线| 日本黄大片高清| 日韩免费高清中文字幕av| 国产精品一区二区在线观看99| 国产黄片视频在线免费观看| 一个人看视频在线观看www免费| 国产精品精品国产色婷婷| 欧美变态另类bdsm刘玥| 国产国拍精品亚洲av在线观看| 国产亚洲av片在线观看秒播厂| 菩萨蛮人人尽说江南好唐韦庄| 国产亚洲一区二区精品| 国产真实伦视频高清在线观看| 午夜激情福利司机影院| 日韩人妻高清精品专区| 秋霞在线观看毛片| 亚洲精品,欧美精品| 免费在线观看成人毛片| 国产精品成人在线| 91精品国产九色| 深夜a级毛片| 国产精品一二三区在线看| 久久热精品热| 麻豆乱淫一区二区| 只有这里有精品99| 亚洲精品456在线播放app| 中文欧美无线码| 狂野欧美白嫩少妇大欣赏| 日韩人妻高清精品专区| 人妻少妇偷人精品九色| 久久久亚洲精品成人影院| 熟女人妻精品中文字幕| 久久精品人妻少妇| 一级黄片播放器| 日韩av在线免费看完整版不卡| 国产精品99久久99久久久不卡 | 日本免费在线观看一区| 免费观看的影片在线观看| 最近中文字幕2019免费版| 天天躁日日操中文字幕| 黑丝袜美女国产一区| 新久久久久国产一级毛片| 亚洲美女视频黄频| 国产大屁股一区二区在线视频| 亚洲av.av天堂| 新久久久久国产一级毛片| 美女国产视频在线观看| 涩涩av久久男人的天堂| 少妇人妻久久综合中文| 国产在线一区二区三区精| 精品一区二区免费观看| 国产精品麻豆人妻色哟哟久久| 日日撸夜夜添| 日韩视频在线欧美| 久久人人爽人人爽人人片va| 赤兔流量卡办理| 狂野欧美激情性xxxx在线观看| 免费看不卡的av| 狂野欧美激情性xxxx在线观看| 亚洲精华国产精华液的使用体验| 午夜免费鲁丝| 亚洲精华国产精华液的使用体验| 观看美女的网站| 日本黄色日本黄色录像| 六月丁香七月| 天堂中文最新版在线下载| 五月天丁香电影| 欧美精品人与动牲交sv欧美| 久久人人爽人人片av| freevideosex欧美| 国产精品伦人一区二区| 亚洲美女视频黄频| 又黄又爽又刺激的免费视频.| 大码成人一级视频| 在线观看免费视频网站a站| 欧美另类一区| 久久av网站| 观看美女的网站| 黄色一级大片看看| 97热精品久久久久久| 欧美日韩一区二区视频在线观看视频在线| 久久久色成人| 久久精品人妻少妇| 韩国av在线不卡| 深夜a级毛片| 国产91av在线免费观看| 日日撸夜夜添| 国产欧美日韩精品一区二区| 18禁在线播放成人免费| 性高湖久久久久久久久免费观看| 丰满少妇做爰视频| 亚洲精品aⅴ在线观看| 97精品久久久久久久久久精品| 亚洲精品,欧美精品| 香蕉精品网在线| 草草在线视频免费看| 精品亚洲乱码少妇综合久久| 亚州av有码| 夜夜爽夜夜爽视频| 狂野欧美激情性xxxx在线观看| 亚洲,欧美,日韩| 91久久精品国产一区二区成人| 亚洲av二区三区四区| 能在线免费看毛片的网站| 亚洲欧美一区二区三区黑人 | 婷婷色av中文字幕| 久久久久久久久久成人| 国产一区亚洲一区在线观看| 中文字幕亚洲精品专区| 亚洲精品亚洲一区二区| 高清欧美精品videossex| 少妇高潮的动态图| 在线观看国产h片| 夜夜爽夜夜爽视频| 国产成人91sexporn| 欧美极品一区二区三区四区| 午夜福利在线在线| 精品人妻熟女av久视频| 国产精品久久久久久久电影| 国产成人免费无遮挡视频| 国产成人一区二区在线| 免费av中文字幕在线| 夜夜爽夜夜爽视频| 我的女老师完整版在线观看| 精品99又大又爽又粗少妇毛片| 在线观看免费日韩欧美大片 | 十分钟在线观看高清视频www | 热99国产精品久久久久久7| 2021少妇久久久久久久久久久| 国产成人一区二区在线| 在线观看三级黄色| 纯流量卡能插随身wifi吗| 一区在线观看完整版| 亚洲国产精品国产精品| 日本猛色少妇xxxxx猛交久久| 日韩成人伦理影院| 美女福利国产在线 | 久久久久视频综合| 国产在线男女| 亚洲aⅴ乱码一区二区在线播放| 在线天堂最新版资源| 国产美女午夜福利| 少妇被粗大猛烈的视频| 国产成人精品一,二区| 成人影院久久| 久久女婷五月综合色啪小说| 国产人妻一区二区三区在| 免费人妻精品一区二区三区视频| 99久久人妻综合| 亚洲精品色激情综合| 欧美高清成人免费视频www| 嫩草影院新地址| 精品国产露脸久久av麻豆| 日韩 亚洲 欧美在线| 免费观看a级毛片全部| 韩国高清视频一区二区三区| 又大又黄又爽视频免费| 成人美女网站在线观看视频| 中国国产av一级| 网址你懂的国产日韩在线| 亚洲四区av| 久久99精品国语久久久| 亚洲精品一区蜜桃| 久久久精品94久久精品| 国产欧美亚洲国产| 在线 av 中文字幕| 成人黄色视频免费在线看| 亚洲国产精品国产精品| 欧美国产精品一级二级三级 | 少妇被粗大猛烈的视频| 精品久久久噜噜| 18禁在线播放成人免费| 国产熟女欧美一区二区| 亚洲欧美日韩另类电影网站 | 性色av一级| 亚洲综合色惰| 国产午夜精品一二区理论片| 一二三四中文在线观看免费高清| 日本黄大片高清| 干丝袜人妻中文字幕| www.色视频.com| 80岁老熟妇乱子伦牲交| 91精品伊人久久大香线蕉| 国产高潮美女av| 国产v大片淫在线免费观看| 久久久久视频综合| 国产精品99久久久久久久久| 一本久久精品| 国产精品成人在线| 国产大屁股一区二区在线视频| 噜噜噜噜噜久久久久久91| 国产白丝娇喘喷水9色精品| 色婷婷久久久亚洲欧美| 深夜a级毛片| 国产精品麻豆人妻色哟哟久久| 美女xxoo啪啪120秒动态图| 精品国产露脸久久av麻豆| 亚洲精品成人av观看孕妇| 九九久久精品国产亚洲av麻豆| 人妻 亚洲 视频| 午夜福利视频精品| 日韩一本色道免费dvd| 久久久久久人妻| 一级a做视频免费观看| 色综合色国产| 国产黄色视频一区二区在线观看| 一区二区av电影网| 久久久欧美国产精品| 大片免费播放器 马上看| 日韩av在线免费看完整版不卡| 国产久久久一区二区三区| 激情五月婷婷亚洲| 色网站视频免费| 免费在线观看成人毛片| 七月丁香在线播放| 高清视频免费观看一区二区| 一本一本综合久久| 亚洲天堂av无毛| 联通29元200g的流量卡| 久久国产亚洲av麻豆专区| 久久热精品热| 伊人久久国产一区二区| 国产视频首页在线观看| 成人亚洲欧美一区二区av| 国产乱来视频区| 亚洲av.av天堂| 麻豆成人av视频| 日本欧美国产在线视频| 久久国产乱子免费精品| 一个人免费看片子| 久久综合国产亚洲精品| 日本黄大片高清| 亚洲av不卡在线观看| 亚洲欧洲日产国产| 老司机影院毛片| 亚洲精品成人av观看孕妇| 国产精品一及| av视频免费观看在线观看| 亚洲成人手机| 汤姆久久久久久久影院中文字幕| 国产色爽女视频免费观看| 嫩草影院新地址| 中文天堂在线官网| 免费黄网站久久成人精品| 熟女人妻精品中文字幕| 久久99热这里只有精品18| 中文资源天堂在线| 亚洲四区av| 日韩伦理黄色片| 国产精品国产av在线观看| 插阴视频在线观看视频| av播播在线观看一区| 中文字幕久久专区| 免费观看性生交大片5| 国产永久视频网站| 国产日韩欧美亚洲二区| 日韩强制内射视频| 国产高清不卡午夜福利| 99热这里只有是精品在线观看| av又黄又爽大尺度在线免费看| 国产成人freesex在线| 亚洲国产精品成人久久小说| 久久久成人免费电影| 人人妻人人爽人人添夜夜欢视频 | 99久久精品国产国产毛片| 欧美日韩视频精品一区| 午夜免费观看性视频| 一级毛片我不卡| 哪个播放器可以免费观看大片| 国产伦精品一区二区三区四那| 最后的刺客免费高清国语| 亚洲真实伦在线观看| 中文字幕久久专区| 久久午夜福利片| 国产 一区精品| 久久婷婷青草| 一区二区三区乱码不卡18| 哪个播放器可以免费观看大片| 久久久精品免费免费高清| 日韩免费高清中文字幕av| 少妇被粗大猛烈的视频| 亚洲精品一二三| 色婷婷久久久亚洲欧美| 日韩制服骚丝袜av| 在线精品无人区一区二区三 | 欧美日韩精品成人综合77777| 国产午夜精品一二区理论片| 国产亚洲精品久久久com| 欧美bdsm另类| 国产精品人妻久久久久久| 色婷婷久久久亚洲欧美| 菩萨蛮人人尽说江南好唐韦庄| 一个人看视频在线观看www免费| 狂野欧美激情性bbbbbb|