• <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
    亚洲国产色片| 春色校园在线视频观看| 日韩高清综合在线| 亚洲av电影不卡..在线观看| 国产精品野战在线观看| 亚洲电影在线观看av| 精品久久久久久久久亚洲| 久久久久久国产a免费观看| 男插女下体视频免费在线播放| 国产精品久久电影中文字幕| 久久鲁丝午夜福利片| 日本黄大片高清| 久久久久久久久大av| 天堂√8在线中文| 久久综合国产亚洲精品| 国产精品嫩草影院av在线观看| av女优亚洲男人天堂| 老女人水多毛片| 久久精品国产亚洲av涩爱| 亚洲精品乱码久久久久久按摩| 国产精品人妻久久久影院| 一边摸一边抽搐一进一小说| 99热这里只有精品一区| 三级经典国产精品| 日韩精品有码人妻一区| 亚洲aⅴ乱码一区二区在线播放| 美女高潮的动态| 国产成人午夜福利电影在线观看| 亚洲精品日韩在线中文字幕| 欧美性感艳星| 蜜桃亚洲精品一区二区三区| 国产免费男女视频| 国内揄拍国产精品人妻在线| 久久久国产成人精品二区| 亚洲精品乱码久久久v下载方式| 亚洲av中文字字幕乱码综合| 中文字幕av成人在线电影| 99在线人妻在线中文字幕| 能在线免费看毛片的网站| 国产v大片淫在线免费观看| 人人妻人人看人人澡| 麻豆久久精品国产亚洲av| 日韩欧美三级三区| 久久久色成人| 亚洲av成人精品一区久久| 亚洲中文字幕日韩| 床上黄色一级片| 久久久国产成人免费| 又黄又爽又刺激的免费视频.| 国产精品一区二区在线观看99 | 22中文网久久字幕| 国产亚洲午夜精品一区二区久久 | 噜噜噜噜噜久久久久久91| 国产片特级美女逼逼视频| 色尼玛亚洲综合影院| 日韩国内少妇激情av| 亚洲真实伦在线观看| 爱豆传媒免费全集在线观看| 日韩高清综合在线| 天堂影院成人在线观看| 国产成人精品久久久久久| 色吧在线观看| 毛片一级片免费看久久久久| 18禁动态无遮挡网站| 不卡视频在线观看欧美| 九九久久精品国产亚洲av麻豆| 日韩av在线大香蕉| 欧美极品一区二区三区四区| 国产老妇女一区| 七月丁香在线播放| 男插女下体视频免费在线播放| 国产又黄又爽又无遮挡在线| 亚洲精品aⅴ在线观看| 亚洲熟妇中文字幕五十中出| 午夜精品在线福利| 欧美一级a爱片免费观看看| 日本黄色视频三级网站网址| 亚州av有码| 久久国内精品自在自线图片| 午夜精品一区二区三区免费看| 国产高清不卡午夜福利| 国产成年人精品一区二区| 日本一二三区视频观看| 日韩一区二区视频免费看| 亚洲国产高清在线一区二区三| 美女黄网站色视频| 99在线视频只有这里精品首页| 国产色婷婷99| 汤姆久久久久久久影院中文字幕 | 美女xxoo啪啪120秒动态图| 成人av在线播放网站| 日韩一区二区视频免费看| 亚洲精品日韩在线中文字幕| 亚洲国产精品成人综合色| 欧美极品一区二区三区四区| 国内精品美女久久久久久| 长腿黑丝高跟| 午夜激情福利司机影院| 国产伦理片在线播放av一区| 国产伦精品一区二区三区视频9| av卡一久久| 国产av一区在线观看免费| 精品酒店卫生间| 国产精品久久久久久精品电影| 精品久久久久久久末码| 国产探花在线观看一区二区| 村上凉子中文字幕在线| 亚洲五月天丁香| 中文在线观看免费www的网站| 亚洲国产高清在线一区二区三| 国产亚洲91精品色在线| 99热全是精品| 国产精品1区2区在线观看.| 国产私拍福利视频在线观看| 成人性生交大片免费视频hd| 久久久欧美国产精品| 久久99蜜桃精品久久| 精品免费久久久久久久清纯| 一卡2卡三卡四卡精品乱码亚洲| 国产黄片美女视频| 国产成年人精品一区二区| 精品一区二区三区视频在线| 欧美人与善性xxx| 精品国内亚洲2022精品成人| 欧美又色又爽又黄视频| 女人十人毛片免费观看3o分钟| av线在线观看网站| 久久热精品热| 亚洲欧美日韩卡通动漫| 久久人妻av系列| 国产爱豆传媒在线观看| 欧美zozozo另类| 久久精品国产99精品国产亚洲性色| 国产毛片a区久久久久| 日韩精品有码人妻一区| 麻豆成人午夜福利视频| 小蜜桃在线观看免费完整版高清| 男人舔女人下体高潮全视频| 国产片特级美女逼逼视频| 亚洲精华国产精华液的使用体验| 草草在线视频免费看| 18禁裸乳无遮挡免费网站照片| 大又大粗又爽又黄少妇毛片口| 国内少妇人妻偷人精品xxx网站| 欧美性猛交╳xxx乱大交人| 午夜精品国产一区二区电影 | 一卡2卡三卡四卡精品乱码亚洲| 成人高潮视频无遮挡免费网站| 亚洲真实伦在线观看| 91久久精品国产一区二区成人| 高清在线视频一区二区三区 | 免费大片18禁| 国产高清三级在线| 91av网一区二区| 午夜福利在线观看吧| 真实男女啪啪啪动态图| 只有这里有精品99| 一区二区三区乱码不卡18| 国产淫语在线视频| 看非洲黑人一级黄片| 日韩高清综合在线| 久久久久久久久久成人| 亚洲18禁久久av| 99热6这里只有精品| 国产精品99久久久久久久久| 长腿黑丝高跟| 亚洲图色成人| 国产精品福利在线免费观看| 欧美成人a在线观看| 99热这里只有是精品50| 国产真实伦视频高清在线观看| 丰满少妇做爰视频| 欧美人与善性xxx| 七月丁香在线播放| 女人被狂操c到高潮| 一级黄色大片毛片| 国产黄a三级三级三级人| 桃色一区二区三区在线观看| av.在线天堂| 欧美性猛交黑人性爽| 欧美成人免费av一区二区三区| 高清视频免费观看一区二区 | 欧美区成人在线视频| 色吧在线观看| 超碰97精品在线观看| 免费播放大片免费观看视频在线观看 | 丰满人妻一区二区三区视频av| 男人和女人高潮做爰伦理| 麻豆成人av视频| 男人舔女人下体高潮全视频| 久久人人爽人人片av| 免费无遮挡裸体视频| 国产成人精品婷婷| 免费黄网站久久成人精品| 午夜福利在线观看免费完整高清在| 亚洲av电影在线观看一区二区三区 | 日韩三级伦理在线观看| 狂野欧美白嫩少妇大欣赏| 国产伦理片在线播放av一区| 国产国拍精品亚洲av在线观看| 欧美丝袜亚洲另类| 亚洲欧美精品自产自拍| 亚洲aⅴ乱码一区二区在线播放| 黄色欧美视频在线观看| 午夜a级毛片| 国产片特级美女逼逼视频| 一个人看视频在线观看www免费| 亚洲av男天堂| 久久精品国产99精品国产亚洲性色| av.在线天堂| 午夜亚洲福利在线播放| 美女被艹到高潮喷水动态| eeuss影院久久| 日韩亚洲欧美综合| 国语自产精品视频在线第100页| 九色成人免费人妻av| 99热这里只有是精品在线观看| 国产高清不卡午夜福利| 91在线精品国自产拍蜜月| 天堂网av新在线| 深夜a级毛片| 99在线视频只有这里精品首页| 人妻制服诱惑在线中文字幕| 久久久精品欧美日韩精品| 亚洲天堂国产精品一区在线| av免费观看日本| 99在线视频只有这里精品首页| 岛国毛片在线播放| 舔av片在线| 最近最新中文字幕大全电影3| 亚洲自拍偷在线| 大香蕉97超碰在线| 国产精品1区2区在线观看.| 成人特级av手机在线观看| 日韩,欧美,国产一区二区三区 | 国产单亲对白刺激| 欧美一区二区精品小视频在线| 69av精品久久久久久| 青春草视频在线免费观看| 国产 一区精品| 国产精品久久久久久精品电影小说 | 有码 亚洲区| 高清毛片免费看| 永久免费av网站大全| 久久99热这里只频精品6学生 | 高清日韩中文字幕在线| 亚洲欧美精品综合久久99| 人妻夜夜爽99麻豆av| 国产精品久久久久久av不卡| 中国美白少妇内射xxxbb| 亚洲精品乱久久久久久| 别揉我奶头 嗯啊视频| 日日啪夜夜撸| 成人av在线播放网站| 在线观看66精品国产| 免费看美女性在线毛片视频| 赤兔流量卡办理| 亚洲av男天堂| 日本三级黄在线观看| 亚洲精品,欧美精品| 国产亚洲精品久久久com| 精品酒店卫生间| or卡值多少钱| 亚洲av中文字字幕乱码综合| 国产国拍精品亚洲av在线观看| 亚洲不卡免费看| 最近最新中文字幕免费大全7| 免费看av在线观看网站| 日产精品乱码卡一卡2卡三| av国产久精品久网站免费入址| 日韩欧美在线乱码| 国产一区二区在线av高清观看| 内地一区二区视频在线| 只有这里有精品99| 国产片特级美女逼逼视频| 白带黄色成豆腐渣| 69人妻影院| 久久久久久久久中文| 久久久成人免费电影| 色视频www国产| 国产精品一区二区性色av| 国产高清国产精品国产三级 | 亚洲精品aⅴ在线观看| 成年女人永久免费观看视频| 国产 一区 欧美 日韩| av免费观看日本| 秋霞在线观看毛片| 亚洲av日韩在线播放| 国产成人a∨麻豆精品| 久久亚洲国产成人精品v| 色综合亚洲欧美另类图片| 亚洲一区高清亚洲精品| 亚洲精品久久久久久婷婷小说 | 国产精品一区二区在线观看99 | 亚洲av免费高清在线观看| 国产精品.久久久| 综合色丁香网| 欧美变态另类bdsm刘玥| 日本猛色少妇xxxxx猛交久久| 国产在视频线在精品| 日本午夜av视频| 久久精品夜色国产| av在线蜜桃| 91精品伊人久久大香线蕉| av在线亚洲专区| 舔av片在线| 成人欧美大片| 亚洲内射少妇av| 老女人水多毛片| 日本wwww免费看| 久久99热6这里只有精品| 纵有疾风起免费观看全集完整版 | 国产精品国产三级国产专区5o | 如何舔出高潮| 五月伊人婷婷丁香| 特大巨黑吊av在线直播| www日本黄色视频网| 秋霞在线观看毛片| 2022亚洲国产成人精品| 三级毛片av免费| 大话2 男鬼变身卡| 1024手机看黄色片| 纵有疾风起免费观看全集完整版 | 久久99热6这里只有精品| 久久热精品热| 午夜激情福利司机影院| 精品人妻偷拍中文字幕| 最近的中文字幕免费完整| 国产一级毛片七仙女欲春2| 日韩欧美精品免费久久| 国产黄片美女视频| 久久午夜福利片| 网址你懂的国产日韩在线| 视频中文字幕在线观看| 免费看光身美女| 欧美性猛交╳xxx乱大交人| 小蜜桃在线观看免费完整版高清| 国产精品爽爽va在线观看网站| 久久这里有精品视频免费| 爱豆传媒免费全集在线观看| 国产成人精品一,二区| www.色视频.com| 亚洲不卡免费看| 男女下面进入的视频免费午夜| 成人二区视频| 日韩中字成人| 亚洲久久久久久中文字幕| 精品久久久久久久久亚洲| 国产亚洲av片在线观看秒播厂 | 久久精品国产自在天天线| 成人二区视频| 国产午夜精品久久久久久一区二区三区| 国产成人aa在线观看| 91久久精品电影网| 国产人妻一区二区三区在| 精品国产一区二区三区久久久樱花 | 亚洲精品乱码久久久v下载方式| 少妇被粗大猛烈的视频| 成人亚洲精品av一区二区| 日本午夜av视频| 亚洲精品456在线播放app| 国产精品无大码| 久久99热6这里只有精品| 国产av在哪里看| 免费黄色在线免费观看| 久久久午夜欧美精品| 亚洲人与动物交配视频| av在线观看视频网站免费| 国产精品一二三区在线看| 久久99精品国语久久久| 久久久国产成人精品二区| 国产精品福利在线免费观看| 99久国产av精品| 亚洲国产精品sss在线观看| a级毛色黄片| 日产精品乱码卡一卡2卡三| 久久久久性生活片| 成人三级黄色视频| 中文字幕亚洲精品专区| 国产伦精品一区二区三区视频9| 色尼玛亚洲综合影院| www.色视频.com| videos熟女内射| 色综合亚洲欧美另类图片| 精品人妻一区二区三区麻豆| 色吧在线观看| 国产淫语在线视频| 狂野欧美激情性xxxx在线观看| 国产又色又爽无遮挡免| 免费看美女性在线毛片视频| www.av在线官网国产| 久久99热这里只频精品6学生 | 欧美性猛交黑人性爽| 18+在线观看网站| or卡值多少钱| 日韩国内少妇激情av| 岛国在线免费视频观看| 亚洲经典国产精华液单| 日韩欧美精品免费久久| 人妻夜夜爽99麻豆av| 简卡轻食公司| 亚洲精品,欧美精品| 久久久国产成人精品二区| 欧美日韩精品成人综合77777| 中文字幕免费在线视频6| 日本wwww免费看| 中文在线观看免费www的网站| 97超视频在线观看视频| 国产精品电影一区二区三区| 国产成人福利小说| av在线亚洲专区| 国产黄片视频在线免费观看| 国产精品一区二区三区四区免费观看| 日韩欧美精品免费久久| 边亲边吃奶的免费视频| 中文字幕精品亚洲无线码一区| 午夜日本视频在线| 韩国av在线不卡| 亚洲欧美精品专区久久| 国产精品久久电影中文字幕| 99热网站在线观看| 精品国内亚洲2022精品成人| 99九九线精品视频在线观看视频| 免费看光身美女| 日日摸夜夜添夜夜爱| 三级经典国产精品| 一区二区三区免费毛片| 午夜福利在线观看免费完整高清在| 国产精品久久久久久精品电影小说 | 国产在视频线精品| 三级国产精品欧美在线观看| 在线免费十八禁| 日韩一本色道免费dvd| 麻豆av噜噜一区二区三区| 国产 一区精品| 欧美高清性xxxxhd video| 亚洲伊人久久精品综合 | 久久久成人免费电影| 久久人妻av系列| 国产欧美另类精品又又久久亚洲欧美| 精品久久久久久久人妻蜜臀av| 波野结衣二区三区在线| 一区二区三区免费毛片| 边亲边吃奶的免费视频| 中文字幕精品亚洲无线码一区| 国产精品无大码| 亚洲美女搞黄在线观看| 丰满人妻一区二区三区视频av| 99热精品在线国产| 国产av不卡久久| 久久久久久久久中文| 日本av手机在线免费观看| 精品人妻视频免费看| 美女高潮的动态| 久久精品夜夜夜夜夜久久蜜豆| 国产在视频线在精品| 99在线人妻在线中文字幕| 91精品一卡2卡3卡4卡| 天美传媒精品一区二区| 99视频精品全部免费 在线| 国内精品宾馆在线| 久久99精品国语久久久| 国产精品永久免费网站| 有码 亚洲区| 伦精品一区二区三区| 少妇猛男粗大的猛烈进出视频 | 国内精品一区二区在线观看| 春色校园在线视频观看| 亚洲精品久久久久久婷婷小说 | 亚洲真实伦在线观看| 久久久久久久国产电影| 亚洲国产欧洲综合997久久,| 色5月婷婷丁香| 免费搜索国产男女视频| 大话2 男鬼变身卡| 国产69精品久久久久777片| 少妇丰满av| 真实男女啪啪啪动态图| or卡值多少钱| 国产精品1区2区在线观看.| 久久久久网色| 久久99蜜桃精品久久| 别揉我奶头 嗯啊视频| 久久精品影院6| 尾随美女入室| 一区二区三区免费毛片| 日韩人妻高清精品专区| 亚洲国产成人一精品久久久| 国产欧美另类精品又又久久亚洲欧美| 国产伦理片在线播放av一区| 成人无遮挡网站| 两个人的视频大全免费| 国产v大片淫在线免费观看| 亚洲一级一片aⅴ在线观看| 精品久久久久久久人妻蜜臀av| 一区二区三区四区激情视频| 身体一侧抽搐| 美女高潮的动态| 美女国产视频在线观看| 国产成人午夜福利电影在线观看| 毛片一级片免费看久久久久| 成人毛片a级毛片在线播放| 欧美丝袜亚洲另类| 亚洲综合色惰| 97超碰精品成人国产| 嫩草影院入口| 国内少妇人妻偷人精品xxx网站| 99久国产av精品| 亚洲精品色激情综合| 亚洲无线观看免费| 国产在视频线精品| 亚洲精品,欧美精品| 99久久成人亚洲精品观看| 色哟哟·www| 大香蕉久久网| 久久久久网色| 国产一区二区在线观看日韩| 啦啦啦观看免费观看视频高清| 免费观看人在逋| 日本免费在线观看一区| 啦啦啦啦在线视频资源| 国产精品国产三级国产av玫瑰| 国产精品不卡视频一区二区| 18禁在线无遮挡免费观看视频| 日韩一本色道免费dvd| 国产精品久久电影中文字幕| 成年女人永久免费观看视频| 三级经典国产精品| 国产麻豆成人av免费视频| 亚洲欧美成人综合另类久久久 | 欧美zozozo另类| 边亲边吃奶的免费视频| 国产91av在线免费观看| 国产精品日韩av在线免费观看| 亚洲国产精品合色在线| 国产人妻一区二区三区在| 在线观看一区二区三区| 久久精品熟女亚洲av麻豆精品 | 亚洲最大成人手机在线| 少妇人妻一区二区三区视频| 亚洲人成网站高清观看| 最近中文字幕高清免费大全6| 身体一侧抽搐| 久久久久久久国产电影| 一级毛片电影观看 | 视频中文字幕在线观看| 日本黄大片高清| 亚洲欧美精品综合久久99| 国产国拍精品亚洲av在线观看| www.av在线官网国产| 能在线免费观看的黄片| 亚洲欧美成人综合另类久久久 | 一个人观看的视频www高清免费观看| 一区二区三区高清视频在线| 欧美高清性xxxxhd video| 欧美性猛交黑人性爽| 欧美日韩综合久久久久久| 建设人人有责人人尽责人人享有的 | 亚洲婷婷狠狠爱综合网| 亚洲精品久久久久久婷婷小说 | 午夜a级毛片| 午夜视频国产福利| 午夜福利在线观看吧| 自拍偷自拍亚洲精品老妇| 国产大屁股一区二区在线视频| 中国国产av一级| 精品国产露脸久久av麻豆 | 在线播放国产精品三级| 我要看日韩黄色一级片| 成年女人看的毛片在线观看| 国产单亲对白刺激| 床上黄色一级片| 亚洲经典国产精华液单| 青春草国产在线视频| 国产一区亚洲一区在线观看| www.av在线官网国产| 国产黄色视频一区二区在线观看 | 小蜜桃在线观看免费完整版高清| 最后的刺客免费高清国语| 国产真实伦视频高清在线观看| 中文字幕久久专区| 少妇猛男粗大的猛烈进出视频 | 91久久精品电影网| 亚洲图色成人| 免费大片18禁| 边亲边吃奶的免费视频| 久久精品国产亚洲av天美| a级毛片免费高清观看在线播放| 九九在线视频观看精品| 99久国产av精品| 国产一区二区在线av高清观看| 老司机影院毛片| 又爽又黄无遮挡网站| 国产国拍精品亚洲av在线观看| 亚洲av二区三区四区| 成年免费大片在线观看| 国产精品人妻久久久影院| 免费无遮挡裸体视频| 桃色一区二区三区在线观看| 天堂√8在线中文| 一级黄色大片毛片| 男人狂女人下面高潮的视频| 男女边吃奶边做爰视频| 高清午夜精品一区二区三区| 老司机福利观看| 丰满乱子伦码专区| 精品国产露脸久久av麻豆 | 夜夜爽夜夜爽视频| 69av精品久久久久久| 国产亚洲5aaaaa淫片| 午夜精品一区二区三区免费看| 欧美成人a在线观看| 日韩欧美精品v在线| 可以在线观看毛片的网站| 国语对白做爰xxxⅹ性视频网站|