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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

ARM 之十 ARMCC(Keil) map 文件(映射文件)详解

發(fā)布時(shí)間:2024/10/14 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM 之十 ARMCC(Keil) map 文件(映射文件)详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在看這篇文章之前

  • 需要對(duì) ARM ELF 文件有一定的了解。了解什么是域(Region)、節(jié)(Section,也稱為節(jié)區(qū))、段(Segment)、鏡像(Image)、鏡像文件(Image File)等概念
  • 需要對(duì)編譯、連接過程有一定的了解
  • map 文件是什么

    ??map 文件對(duì)應(yīng)的中文名應(yīng)該是映射文件,用來展示(映射)項(xiàng)目構(gòu)建的鏈接階段的細(xì)節(jié)。通常包含程序的全局符號(hào)、交叉引用和內(nèi)存映射等等信息。目前,大多數(shù)編譯套件(主要是其中的鏈接器)都可以生成 Map 文件。常見的 GCC、VC、IAR 都可以輸出 map 文件(PC平臺(tái)的 map 文件與 ARM 平臺(tái)的差別較大)。

    ??在 ARM 的官方文檔中,并沒有找到有關(guān)于 ARM 內(nèi)核的 map 文件的介紹文檔。不過倒是有個(gè) C51 生成的 map 文件的說明文檔:Listing (MAP) File。但是 C51 的 map 文件和 ARM 核的 map 文件差別比較大,也沒啥參考價(jià)值!

    ??map 文件就是用來展示鏈接器工作過程的東西。想要了解 map 文件還需要對(duì) ARM ELF 文件有一定的了解(可以參考博文ARM 之一 ELF文件、鏡像(Image)文件、可執(zhí)行文件、對(duì)象文件 詳解)以及需要對(duì)于編譯過程有一定的了解。下圖顯示了鏈接器在軟件開發(fā)過程中的角色。鏈接器接受幾種類型的文件作為輸入,包括對(duì)象文件、命令文件、庫和部分鏈接的文件,創(chuàng)建一個(gè)可執(zhí)行對(duì)象模塊。

    map 文件從哪來

    ??map 文件是由編譯套件中的鏈接器產(chǎn)生的。ARM 的編譯套件中鏈接器為armlink,map 文件中的各信息均由 armlink 的各參數(shù)(–info topic、–map、–symbols等)控制輸出(由 --list=filename 文件名輸出到文件)。關(guān)于 ARM 編譯套件的詳細(xì)信息,參考博文ARM 之七 主流編譯器(armcc、iar、gcc for arm)詳細(xì)介紹 中關(guān)于 ARM 鏈接器的詳細(xì)參數(shù)。下面是 armlink 的和 map 文件有關(guān)的參數(shù)介紹

    --list=filename

    將診斷輸出重定向到指定名字為 filename 文件,即輸出 filename.map 文件。

    語法

    --list=filename。其中 filename 是用于保存診斷輸出的文件。 文件名可以包含路徑。

    使用

  • 將參數(shù) --info, --map, --symbol, --verbose, --xref, --xreffrom 和 --xrefto 的診斷信息輸出重定向到文件。
  • 輸出診斷信息時(shí)將創(chuàng)建指定的文件。 如果已存在同名文件,則會(huì)覆蓋該文件。 但是,如果未輸出診斷,則不會(huì)創(chuàng)建文件。 在這種情況下,具有相同名稱的任何現(xiàn)有文件的內(nèi)容保持不變。如果指定了 filename 而沒有路徑,則會(huì)放在與鏈接器生成的可執(zhí)行文件的相同目錄下。
  • --info=topic[,topic,…]

    打印有關(guān)指定主題的信息。通常與上面的 --list=file 一起使用,將輸出內(nèi)容寫入指定的文本文件中。

    語法

    --info=topic[,topic,…]。其中 topic 是以下關(guān)鍵字以逗號(hào)分隔的組合(也可以每次只用一個(gè)關(guān)鍵字,然后寫多個(gè) --info=關(guān)鍵字):

    • any:對(duì)于使用 .ANY 模塊選擇器的節(jié)區(qū),列出:

      • 排序順序
      • 放置算法
      • The sections that are assigned to each execution region in the order they are assigned by the placement algorithm.
      • 有關(guān)每個(gè)域使用的應(yīng)急空間和策略的信息。

      在分散加載文件中使用執(zhí)行域?qū)傩?ANY_SIZE 時(shí),此關(guān)鍵字還會(huì)顯示其他信息。

    • architecture:通過列出處理器,FPU和字節(jié)順序來歸納鏡像文件架構(gòu)。

    • common:列出從鏡像文件中刪除的所有公共節(jié)區(qū)。使用這個(gè)選項(xiàng)意味著:--info=common,totals

    • compression:提供有關(guān) RW 壓縮過程的更多信息。

    • debug:Lists all rejected input debug sections that are eliminated from the image as a result of using --remove. Using this option implies --info=debug,totals.

    • exceptions:Gives information on exception table generation and optimization.

    • inline:列出由鏈接器內(nèi)聯(lián)的所有函數(shù),并且如果使用了 --inline,則列出內(nèi)聯(lián)的總數(shù)。

    • inputs:列出輸入符號(hào)、對(duì)象和庫

    • libraries:Lists the full path name of every library automatically selected for the link stage.You can use this option with --info_lib_prefix to display information about a specific library.

    • merge:Lists the const strings that are merged by the linker. Each item lists the merged result, the strings being merged, and the associated object files.

    • sizes:列出鏡像中每個(gè)輸入對(duì)象和庫成員的代碼和數(shù)據(jù)(RO數(shù)據(jù),RW數(shù)據(jù),ZI數(shù)據(jù)和調(diào)試數(shù)據(jù))大小。 使用此選項(xiàng)意味著–info=sizes,totals。

    • stack:列出所有函數(shù)的堆棧使用情況

    • summarysizes:Summarizes the code and data sizes of the image.

    • summarystack:Summarizes the stack usage of all global symbols.

    • tailreorder:Lists all the tail calling sections that are moved above their targets, as a result of using --tailreorder.

    • totals:列出輸入對(duì)象和庫的代碼和數(shù)據(jù)(RO數(shù)據(jù),RW數(shù)據(jù),ZI數(shù)據(jù)和調(diào)試數(shù)據(jù))大小的總和。

    • unused:列出由于使用 --remove 而從用戶代碼中刪除的所有未使用的部分。 它不會(huì)列出從 ARM C 庫加載的任何未使用的部分。

    • unusedsymbols:Lists all symbols that have been removed by unused section elimination.

    • veneers:列出鏈接器生成的膠合代碼。

    • veneercallers:Lists the linker-generated veneers with additional information about the callers to each veneer. Use with --verbose to list each call individually.

    • veneerpools:Displays information on how the linker has placed veneer pools.

    • visibility:Lists the symbol visibility information. You can use this option with either --info=inputs or --verbose to enhance the output.

    • weakrefs:Lists all symbols that are the target of weak references, and whether or not they were defined.

    用法

  • --info=sizes,totals 的輸出始終包含輸入對(duì)象和庫的總計(jì)中的填充值。
  • 如果使用 RW 數(shù)據(jù)壓縮(默認(rèn)值),或者使用 --datacompressor=id 選項(xiàng)指定了壓縮器,則 --info=sizes,totals 的輸出包括 Grand Totals 下的條目以反映真實(shí)鏡像大小。
  • 列表中的關(guān)鍵字之間不允許有空格。
  • Keil 配置

    ??鏈接器列表文件或 Map 文件包含有關(guān)鏈接/定位過程的大量信息。在 Keil 中,需要通過 Project -> Options for Target -> Listing 界面如下的配置才可以輸出 map 文件:

    其中,各選項(xiàng)的基本功能如下:

    • Select Folder for Listings…: 選擇存放清單文件的文件夾
    • Page Width: 為清單文件指定每行字符數(shù)
    • Page Length: 為清單文件指定每頁的行數(shù)
    • Assembler Listing: 為匯編源文件創(chuàng)建列表文件,對(duì)應(yīng)產(chǎn)生 源文件名.lst 的文件
      • Cross Reference: 列出有關(guān)符號(hào)的交叉引用信息,包括它們的定義位置以及宏的內(nèi)部和外部的使用位置
    • C Compiler Listing: 為 C 源文件創(chuàng)建列表文件,對(duì)應(yīng)產(chǎn)生 源文件名.txt 的文件 和 源文件名.lst 的文件
    • C Preprocessor Listing: 指示編譯器生成預(yù)處理文件。 宏調(diào)用將被展開并且注釋將被刪除 對(duì)應(yīng)產(chǎn)生 源文件名.i 的文件
    • Linker Listing: 讓鏈接器為目標(biāo)項(xiàng)目創(chuàng)建映射文件(map 文件)。對(duì)應(yīng)的 armlink 參數(shù)為 --list=filename ,如果不選擇則不會(huì)生成文件,對(duì)應(yīng)生成 用戶指定名.map 的文件。生成的 MAP 文件如下圖所示:

      通常需要配合以下參數(shù)一起使用:
      • Memory Map: 包含一個(gè)內(nèi)存映射,其中包含鏡像中每個(gè)加載區(qū),執(zhí)行區(qū)和輸入節(jié)的地址和大小,包括調(diào)試和鏈接器生成的輸入節(jié)。對(duì)應(yīng)的 armlink 參數(shù)為 --map
      • Callgraph: 以 HTML 格式創(chuàng)建函數(shù)的靜態(tài)調(diào)用圖文件。 調(diào)用圖給出了鏡像中所有函數(shù)的定義和參考信息。對(duì)應(yīng)的 armlink 參數(shù)為 --callgraph 。該項(xiàng)會(huì)獨(dú)立生成一個(gè) 配置的輸出名.htm 的文件。如下圖所示:

        其中顯示了詳細(xì)的調(diào)用關(guān)系。最重要的是,其中還有使用的棧的大小!
      • Symbols: 列出本地,全局和鏈接器生成的符號(hào)以及符號(hào)值。對(duì)應(yīng)的 armlink 參數(shù)為 --symbols。注意:該參數(shù)不包含映射符號(hào),下文我們會(huì)詳細(xì)介紹!
      • Cross Reference: 列出輸入節(jié)之間的所有交叉引用。對(duì)應(yīng)的 armlink 參數(shù)為 --xref
      • Size Info: 給出鏡像中每個(gè)輸入對(duì)象和庫成員的代碼和數(shù)據(jù)(RO 數(shù)據(jù),RW 數(shù)據(jù),ZI 數(shù)據(jù)和調(diào)試數(shù)據(jù))的大小的列表。對(duì)應(yīng)的 armlink 參數(shù)為 --info sizes
      • Totals Info: 提供輸入對(duì)象和庫的代碼和數(shù)據(jù)(RO 數(shù)據(jù),RW 數(shù)據(jù),ZI 數(shù)據(jù)和調(diào)試數(shù)據(jù))大小的總和。對(duì)應(yīng)的 armlink 參數(shù)為 --info totals
      • Unused Section Info: 列出從鏡像文件中刪除的所有未使用的部分。對(duì)應(yīng)的 armlink 參數(shù)為 --info unused
      • Veneers Info: 提供鏈接器生成的 Thumb/ARM 膠合代碼的詳細(xì)信息。對(duì)應(yīng)的 armlink 參數(shù)為 --info veneers

    map 文件有啥用

    map 文件對(duì)于分析問題是非常有用的!

  • 分析問題
  • 優(yōu)化程序
  • 學(xué)習(xí)了解連接過程
  • map 文件中的符號(hào)

    ?? 在 map 文件中,有很多符號(hào)是編譯套件的開發(fā)商預(yù)定義好的,用戶的符號(hào)不能與編譯套件的開發(fā)商預(yù)定義好的符號(hào)沖突。以下內(nèi)容來自于 ARM 的鏈接器手冊(cè)!關(guān)于如何導(dǎo)入這些符號(hào),鏈接器的手冊(cè)有專門的章節(jié)來介紹!

    映射符號(hào)

    ??映射符號(hào)由編譯器和匯編器生成,以識(shí)別文字池邊界處的代碼和數(shù)據(jù)之間的內(nèi)聯(lián)轉(zhuǎn)換,以及 ARM 代碼和 Thumb 代碼之間的內(nèi)聯(lián)轉(zhuǎn)換。例如 ARM/Thumb 交互操作膠合代碼。映射符號(hào)有如下這些:

    • $a:一系列 ARM 指令的開始
    • $t:一系列 Thumb 指令的開始
    • $t.x:一系列 ThumbEE 指令的開始
    • $d:一系列數(shù)據(jù)項(xiàng)的開始,如文字池
  • 文字池 是代碼段中存放常量數(shù)據(jù)的區(qū)域。因?yàn)闆]有一條指令可以生成一個(gè) 4 字節(jié)的常量,因此編譯器將這些常量放到文字池中,然后生成從文字池加載這些常量的代碼。
  • ARM/Thumb交互(ARM/Thumb interworking)是指對(duì)匯編語言和 C/C++ 語言的 ARM 和 Thumb 代碼進(jìn)行連接的方法,它進(jìn)行兩種狀態(tài)(ARM 和 Thumb)間的切換。
  • 膠合代碼(Veneer):在進(jìn)行 ARM/Thumb 交互時(shí),有時(shí)需使用額外的代碼,這些代碼被稱為 膠合代碼(Veneer)。
  • AAPCS 定義了 ARM 和 Thumb 過程調(diào)用的標(biāo)準(zhǔn)。
  • ??armlink 會(huì)生成 $d.realdata 映射符號(hào),以告訴 fromelf 該數(shù)據(jù)是來自非可執(zhí)行節(jié)區(qū)。因此,fromelf -z 輸出的代碼和數(shù)據(jù)大小與 armlink --info sizes 的輸出相同。例如:

    Code (inc. data) RO Datax y z

    在以上的示例中,y 標(biāo)記為 $d,RO Data 標(biāo)記為 $d.realdata。如果啟用了 --list_mapping_symbols,則會(huì)在 map 文件中有體現(xiàn),如下圖:

    請(qǐng)注意:

  • 以字符 $v 開頭的符號(hào)是與 VFP 相關(guān)的映射符號(hào),在使用 VFP 構(gòu)建目標(biāo)時(shí)可能會(huì)輸出。 避免在源代碼中使用以 $v 開頭的符號(hào)。
  • 使用 fromelf --elf --strip=localsymbols 命令修改可執(zhí)行鏡像會(huì)從鏡像中刪除所有映射符號(hào)。
  • 其必須由 armlink 的參數(shù) --list_mapping_symbols 和 --no_list_mapping_symbols 分別來控制顯示與不顯示。在默認(rèn)情況下為 --no_list_mapping_symbols,即不顯示這部分符號(hào)。
  • 鏈接器定義的符號(hào)

    ??當(dāng)鏈接器創(chuàng)建鏡像文件時(shí),它會(huì)創(chuàng)建一些 ARM 預(yù)定義的與域或者節(jié)相關(guān)的符號(hào)。這些符號(hào)就代表了鏈接器創(chuàng)建創(chuàng)建鏡像的依據(jù)。下面我們就重點(diǎn)來了解一下這些符號(hào)。

    ??鏈接器定義了一些 ARM 保留的符號(hào),我們可以在需要時(shí)訪問這些符號(hào)。這些符號(hào)是包含 $$ 字符序列的符號(hào)以及所有其他包含 $$ 字符序列的外部名稱。 您可以導(dǎo)入這些符號(hào)地址,并將它們作為匯編語言程序的可重定位地址使用,或者將它們作為 C 或 C++ 源代碼中的 extern 符號(hào)來引用。

    • 如果使用 --strict 編譯器命令行選項(xiàng),則編譯器不接受包含 $ 的符號(hào)名稱。 要重新啟用支持,請(qǐng)?jiān)诰幾g器命令行中包含 --dollar 選項(xiàng)。
    • 鏈接器定義的符號(hào)只有在代碼引用它們時(shí)才會(huì)生成。
    • 如果存在僅執(zhí)行(XO)節(jié),則鏈接器定義的符號(hào)受以下約束:
      • 不能對(duì)沒有 XO 節(jié)的域或者空域定義 XO 連接器定義符號(hào)
      • 不能對(duì)僅包含 RO 節(jié)的域定義 XO 連接器定義符號(hào)
      • 對(duì)于僅包含 XO 節(jié)的域,不能定義 RO 連接器定義符號(hào)

    引入到 C/C++

    可以通過 值引用地址引用 這兩種方式將鏈接器定義的符號(hào)導(dǎo)入到的 C 或 C++ 源代碼中來供我們使用:

    • 值引用:extern unsigned int symbol_name;
    • 地址引用:extern void *symbol_name;

    注意,如果將符號(hào)聲明為 int 類型的值引用,則必須使用尋址操作符(&)來獲得正確的值,如下例所示:

    // Importing a linker-defined symbol extern unsigned int Image$$ZI$$Limit; config.heap_base = (unsigned int) &Image$$ZI$$Limit;//Importing symbols that define a ZI output section extern unsigned int Image$$ZI$$Length; extern char Image$$ZI$$Base[]; memset(Image$$ZI$$Base, 0, (unsigned int)&Image$$Length);

    引入到 匯編

    可以使用指令 IMPORT 將連接器定義的符號(hào)引入到 ARM 匯編文件中來供我們使用:

    IMPORT |Image$$ZI$$Limit| … zi_limit DCD |Image$$ZI$$Limit|LDR r1, zi_limit

    域相關(guān)的符號(hào)

    ??鏈接器為鏡像文件中的每個(gè)域生成不同類型的與域相關(guān)的符號(hào),我們可以根據(jù)需要訪問這些符號(hào)。域相關(guān)的符號(hào)主要有以下兩種:

    • Image$$ 或者 Load$$ 開頭的符號(hào),用于各執(zhí)行域
    • Load$$LR$$ 開頭的符號(hào),用于各加載域

    ??如果未使用分散加載文件,則會(huì)以默認(rèn)的 region 名稱來生成域相關(guān)的符號(hào)。鏈接器默認(rèn)的域名稱如下:

    • ER_XO : 用于僅執(zhí)行屬性的執(zhí)行域(如果存在)。

    • ER_RO : 用于只讀執(zhí)行域。

    • ER_RW : 用于可讀寫執(zhí)行域。

    • ER_ZI : 用于零初始化的執(zhí)行域。

      可以將這些名稱插入 Image$$ 和 Load$$ 中以獲取所需的地址,例如:Load$$ER_RO$$Base 就是只讀域的基地址。

    ??使用分散加載時(shí),連接器將使用分散加載文件中的名稱來生成各種域相關(guān)的符號(hào)。分散加載文件可以實(shí)現(xiàn)以下功能:

    • 命名鏡像中的所有執(zhí)行域,并提供他們的加載和執(zhí)行地址。
    • 定義堆棧和堆。 鏈接器還會(huì)生成特殊的棧和堆符號(hào)。
  • 鏡像的 ZI 輸出節(jié)不是靜態(tài)創(chuàng)建的,而是在運(yùn)行時(shí)自動(dòng)動(dòng)態(tài)創(chuàng)建的。 因此,ZI 輸出節(jié)沒有加載地址符號(hào)。
  • 符號(hào) Load$$region_name 僅適用于執(zhí)行域。Load$$LR$$load_region_name 符號(hào)僅適用于加載域。
  • 執(zhí)行域符號(hào) Image$$

    ??鏈接器為鏡像中存在的每個(gè)執(zhí)行域生成符號(hào) Image$$。下表列出了鏈接器為鏡像中存在的每個(gè)執(zhí)行域生成的符號(hào)。 初始化 C 庫后,所有符號(hào)都指向執(zhí)行地址。

    SymbolDescription
    Image$$region_name$$Base域的執(zhí)行地址
    Image$$region_name$$Length執(zhí)行域長(zhǎng)度(以字節(jié)為單位),不包括 ZI 的長(zhǎng)度。
    Image$$region_name$$Limit超出執(zhí)行域中非 ZI 部分末尾的字節(jié)的地址
    Image$$region_name$$RO$$Base域中的輸出節(jié) RO 的執(zhí)行地址
    Image$$region_name$$RO$$LengthLength of the RO output section in bytes.
    Image$$region_name$$RO$$LimitAddress of the byte beyond the end of the RO output section in the execution region.
    Image$$region_name$$RW$$BaseExecution address of the RW output section in this region.
    Image$$region_name$$RW$$LengthLength of the RW output section in bytes.
    Image$$region_name$$RW$$LimitAddress of the byte beyond the end of the RW output section in the execution region.
    Image$$region_name$$XO$$BaseExecution address of the XO output section in this region.
    Image$$region_name$$XO$$LengthLength of the XO output section in bytes.
    Image$$region_name$$XO$$LimitAddress of the byte beyond the end of the XO output section in the execution region.
    Image$$region_name$$ZI$$BaseExecution address of the ZI output section in this region.
    Image$$region_name$$ZI$$LengthLength of the ZI output section in bytes.
    Image$$region_name$$ZI$$LimitAddress of the byte beyond the end of the ZI output section in the execution region.

    執(zhí)行域符號(hào) Load$$

    ??鏈接器為鏡像中存在的每個(gè)執(zhí)行域生成符號(hào) Load$$。下表列出了鏈接器為鏡像中存在的每個(gè) Load$$ 執(zhí)行域生成的符號(hào)。 初始化 C 庫后,所有符號(hào)都指向加載地址。

    SymbolDescription
    Load$$region_name$$BaseLoad address of the region.
    Load$$region_name$$LengthRegion length in bytes.
    Load$$region_name$$LimitAddress of the byte beyond the end of the execution region.
    Load$$region_name$$RO$$BaseAddress of the RO output section in this execution region.
    Load$$region_name$$RO$$LengthLength of the RO output section in bytes.
    Load$$region_name$$RO$$LimitAddress of the byte beyond the end of the RO output section in the execution region.
    Load$$region_name$$RW$$BaseAddress of the RW output section in this execution region.
    Load$$region_name$$RW$$LengthLength of the RW output section in bytes.
    Load$$region_name$$RW$$LimitAddress of the byte beyond the end of the RW output section in the execution region.
    Load$$region_name$$XO$$BaseAddress of the XO output section in this execution region.
    Load$$region_name$$XO$$LengthLength of the XO output section in bytes.
    Load$$region_name$$XO$$LimitAddress of the byte beyond the end of the XO output section in the execution region.
    Load$$region_name$$ZI$$BaseLoad address of the ZI output section in this execution region.
    Load$$region_name$$ZI$$LengthLoad length of the ZI output section in bytes.
    The Load Length of ZI is zero unless region_name has the ZEROPAD scatter-loading
    keyword set. If ZEROPAD is set then:
    Load Length = Image$$region_name$$ZI$$Length
    Load$$region_name$$ZI$$LimitLoad address of the byte beyond the end of the ZI output section in the execution region.

    初始化 C 庫之前,此表中的所有符號(hào)均指加載地址。請(qǐng)注意以下事項(xiàng):

    • 這些符號(hào)是絕對(duì)的,因?yàn)橄鄬?duì)于節(jié)的符號(hào)只能有執(zhí)行地址。
    • 這些符號(hào)考慮了 RW 壓縮。
    • 從 RW 壓縮執(zhí)行域引用的鏈接器定義的符號(hào)必須是在應(yīng)用 RW 壓縮之前可解析的符號(hào)。
    • 如果鏈接器檢測(cè)到從 RW 壓縮域到依賴于 RW 壓縮的鏈接器定義符號(hào)的重定位,則鏈接器將禁用當(dāng)前域的壓縮。
    • Limit 和 Length 值影響寫入文件的任何零初始化數(shù)據(jù)。 使用 ZEROPAD 分散加載關(guān)鍵字時(shí),零初始化數(shù)據(jù)將寫入文件。

    加載域符號(hào) Load$$LR$$

    ??鏈接器為鏡像中存在的每個(gè)加載區(qū)生成符號(hào) Load$$LR$$。一個(gè) Load$$LR$$ 加載域可以包含許多執(zhí)行域,因此沒有單獨(dú)的 $$RO 和 $$RW 部分。下表顯示了鏈接器為鏡像中存在的每個(gè) Load$$LR$$ 加載域生成的符號(hào)。

    SymbolDescription
    Load$$LR$$load_region_name$$BaseAddress of the load region.
    Load$$LR$$load_region_name$$LengthLength of the load region.
    Load$$LR$$load_region_name$$LimitAddress of the byte beyond the end of the load region.

    節(jié)相關(guān)的符號(hào)

    ??與節(jié)相關(guān)的符號(hào)是鏈接器在創(chuàng)建沒有使用分散加載文件的鏡像時(shí)生成的符號(hào)。鏈接器會(huì)為輸出和輸入節(jié)生成不同類型的與節(jié)相關(guān)的符號(hào):

    • 鏡像符號(hào)(Image symbols)(如果不使用分散加載來創(chuàng)建簡(jiǎn)單的鏡像文件)。 簡(jiǎn)單的鏡像文件具有多達(dá)四個(gè)輸出節(jié)(XO,RO,RW 和 ZI),用于生成相應(yīng)的執(zhí)行域。
    • 輸入節(jié)符號(hào)(Input section symbols) 鏡像中存在的每個(gè)輸入節(jié)的輸入節(jié)符號(hào)(Input section symbols)

    ??鏈接器首先按屬性 RO,RW 或 ZI 對(duì)執(zhí)行域內(nèi)的節(jié)進(jìn)行排序,然后按名稱排序。 例如,所有 .text 節(jié)都放在一個(gè)連續(xù)的塊中。 具有相同屬性和名稱的連續(xù)塊部分稱為合并節(jié)。

  • ARM 建議優(yōu)先使用與域相關(guān)的符號(hào),而不是與節(jié)相關(guān)的符號(hào)。
  • 鏡像符號(hào)

    ??當(dāng)您不使用分散加載文件來創(chuàng)建簡(jiǎn)單鏡像時(shí),鏡像符號(hào)將由鏈接器生成。我們常用的 Keil 會(huì)默認(rèn)生成分散加載文件的,所以基本沒有不使用分散加載文件的情況。下表顯示了鏡像符號(hào):

    SymbolSection typeDescription
    Image$$RO$$BaseOutputAddress of the start of the RO output section.
    Image$$RO$$LimitOutputAddress of the first byte beyond the end of the RO output section.
    Image$$RW$$BaseOutputAddress of the start of the RW output section.
    Image$$RW$$LimitOutputAddress of the byte beyond the end of the ZI output section.
    (The choice of the end of the ZI region rather than the end of the RW region is to maintain compatibility with legacy code.)
    Image$$ZI$$BaseOutputAddress of the start of the ZI output section.
    Image$$ZI$$LimitOutputAddress of the byte beyond the end of the ZI output section.

    如果存在 XO 節(jié),那么還包含符號(hào) Image$$XO$$Base 和 Image$$XO$$Limit

    ??如果使用了分散加載文件,則上面這些鏡像符號(hào)都將稱為未定義的。 如果在代碼中訪問這些符號(hào)中的任何一個(gè),則必須將它們視為弱引用。__user_setup_stackheap() 的標(biāo)準(zhǔn)實(shí)現(xiàn)中就使用 Image$$ZI$$Limit 中的值,因此,如果您使用的是分散加載文件,則必須手動(dòng)設(shè)置堆棧和堆。 方法主要有以下兩種:

    • 在分散文件中使用下列方法之一
      • 定義名為 ARM_LIB_STACK 和 ARM_LIB_HEAP 的單獨(dú)的棧和單獨(dú)的堆域。
      • 定義包含堆棧和堆的組合域,名為 ARM_LIB_STACKHEAP。
    • 通過重新實(shí)現(xiàn) __user_setup_stackheap() 來設(shè)置堆和堆棧邊界。(在我們的項(xiàng)目中的 .s 啟動(dòng)文件中,是這種方法)

    具體見博文 ARM 之十三 armlink(Keil) 分散加載機(jī)制詳解 及 分散加載文件的編寫

    輸入節(jié)符號(hào)

    鏈接器為鏡像中存在的每個(gè)輸入節(jié)生成輸入節(jié)符號(hào)。下表顯示了鏈接器定義的輸入節(jié)符號(hào):

    SymbolSection typeDescription
    SectionName$$BaseInputAddress of the start of the consolidated section called SectionName.
    SectionName$$LengthInputLength of the consolidated section called SectionName (in bytes).
    SectionName$$LimitInputAddress of the byte beyond the end of the consolidated section called SectionName.

    ??如果在的代碼引用輸入節(jié)符號(hào),則表示希望將鏡像中具有相同名稱的所有輸入節(jié)都連續(xù)放置在鏡像內(nèi)存映射中。如果分散加載文件不連續(xù)地放置輸入節(jié),則鏈接器會(huì)發(fā)出錯(cuò)誤。 這是因?yàn)樵诜沁B續(xù)存儲(chǔ)器上將導(dǎo)致 Base 符號(hào)和 Limit 符號(hào)是不明確的。

    map 文件示例

    ??根據(jù)選擇的參數(shù)不同,map 文件中的內(nèi)容肯定是有變化的!下面以 Keil 中全選以上所說的參數(shù)后生成的 map 文件為例來進(jìn)行說明。map 文件中,有如下圖所示的六個(gè)大部分:

    其中,有些符號(hào)需要我們知道其含義:

    • .data:這些部分保存有助于程序內(nèi)存映像的已初始化數(shù)據(jù)
    • .text:本節(jié)包含程序的文本或可執(zhí)行指令
    • .bss:本節(jié)保存有助于程序內(nèi)存映像的未初始化數(shù)據(jù)
    • .ARM.exidx*:以.ARM.exidx開頭的節(jié)包含部分展開的索引條目
    • i.xxxx: i 是 interface 的意思,i.xxxx 就表示 xxx 接口(一般就是指函數(shù)名)

    更信息的請(qǐng)參考博文 ARM 之一 ELF 文件、鏡像(Image)文件、可執(zhí)行文件、對(duì)象文件 詳解

    Section Cross References

    ??該部分顯示了節(jié)區(qū)之間的交叉引用,指的是各個(gè)源文件生成的模塊之間相互引用的關(guān)系,是由 armlink 的參數(shù) --xref 生成的。主要分為以下幾種情況:

    • 用戶代碼間接口的相互引用: 例如:stm32f4xx_ll_flash.o(i.LL_FLASH_EraseChip) refers to stm32f4xx_ll_flash.o(i.LL_FLASH_IsActiveFlag_BSY) for LL_FLASH_IsActiveFlag_BSY 表示 stm32f4xx_ll_flash.o 中的函數(shù) LL_FLASH_EraseChip 引用了 stm32f4xx_ll_flash.o 中的 函數(shù) LL_FLASH_IsActiveFlag_BSY,其中的 stm32f4xx_ll_flash.o 是由用戶代碼 stm32f4xx_ll_flash.c 生成的模塊

    • 用戶接口引用用戶數(shù)據(jù):主要有兩類,例如:lora.o(i.LoRaRcvProcess) refers to lora.o(.data) for Radio 表示 lora.o 中的接口 LoRaRcvProcess 引用了 lora.o 中的已初始化數(shù)據(jù) Radio;lora.o(i.LoRaRcvProcess) refers to lora.o(.bss) for ProcLoRa 表示 lora.o 中的接口 LoRaRcvProcess 引用了 lora.o 中的未初始化默認(rèn)初始化為0數(shù)據(jù) ProcLoRa

    • 用戶數(shù)據(jù)引用接口: 這個(gè)要是函數(shù)指針的使用。例如:pnwz.o(.data) refers to pnwzuif.o(i.PNWZ_USER_RespGetLife) for PNWZ_USER_RespGetLife

    • 用戶接口引用 C 庫接口: 例如:pnwzuif.o(i.PNWZ_USER_ReqGetVerHW) refers to strlen.o(.text) for strlen

    • 代碼引用接口: 主要發(fā)生于 C 庫之間(ARM C 庫是不開源的,僅提供二進(jìn)制文件),例如:``

    • C 庫接口之間的引用: 主要發(fā)生于 C 庫之間(ARM C 庫是不開源的,僅提供二進(jìn)制文件),例如:__2sprintf.o(.text) refers to _sputc.o(.text) for _sputc 及 __printf_flags_ss_wp.o(.text) refers to __printf_wp.o(i._is_digit) for _is_digit

    • C庫引用連接器符號(hào): 例如:exit.o(.text) refers to rtexit.o(.ARM.Collect$$rtexit$$00000000) for __rt_exit

    • 符號(hào)之間的引用: 例如:retnan.o(x$fpl$retnan) refers to trapv.o(x$fpl$trapveneer) for __fpl_cmpreturn

    ??在 ARM 編譯套件中,所有的 C 庫由工具armar來管理,位于 ARM 編譯器目錄 lib 下。使用 armar 即可從指定的庫文件中解壓出 __main.o 等模塊。至于如何操作,參見博文ARM 之九 Cortex-M/R 內(nèi)核啟動(dòng)過程 / 程序啟動(dòng)流程(基于ARMCC、Keil)。

    Removing Unused input sections from the image

    ??這部分列出了鏈接器移除的我們?cè)创a中實(shí)際未使用的數(shù)據(jù)和函數(shù)。其中包含移除數(shù)據(jù)的大小。例如Removing flash.o(.rrx_text), (6 bytes). 表示移除 flash.o 中的 6 字節(jié)的代碼;Removing virtualuart.o(i.VirtualUartBufClear), (92 bytes). 表示移除 virtualuart.o 中的函數(shù) VirtualUartBufClear,共 92 字節(jié)。
    ??需要注意的是,被移除的函數(shù)在調(diào)試時(shí)將無法進(jìn)行調(diào)試。如果不注意,在調(diào)試時(shí)很容易造成困擾。如下圖所示:

    Image Symbol Table

    ??鏡像符號(hào)映射表。就是每個(gè)符號(hào)(這里的符號(hào)可以指模塊、變量、函數(shù))實(shí)際的地址等信息。分為以下三部分:

    Mapping Symbols

    這一部分只有在指定了連接器參數(shù) --list_mapping_symbols 才會(huì)有!下面是一個(gè)對(duì)比:

    各列的含義如下:

    • Sym: 連接器定義的各種符號(hào)
    • Value: 符號(hào)表示的地址
    • Execution Region: 符號(hào)所在的執(zhí)行域

    Local Symbols

    不知道 ARMCC 是怎么分的 Local 和 Global。各列含義如下:

    • Symbol Name
    • Value
    • Ov Type
    • Size
    • Object(Section)

    Global Symbols

    不知道 ARMCC 是怎么分的 Local 和 Global。

    Memory Map of the image

    ??該映射包含鏡像文件中每個(gè)加載域,執(zhí)行域和輸入節(jié)(包括連接器生成的輸入節(jié))的地址和大小。由連接器 armlink 通過參數(shù) --map 生成。這部分與 分散加載文件(Scatter File) 有密切的關(guān)系。如果使用 Keil,則在 Keil 的配置界面中有如下配置:

    這里的設(shè)置就是對(duì)應(yīng)的分散加載文件中的內(nèi)容。如果我們?cè)阪溄悠鞯呐渲庙撁娌贿x擇 Use Memory Layout from Taget Dialog,則需要如上圖自己指定一個(gè)分散加載文件。其實(shí),如果選擇 Use Memory Layout from Taget Dialog,Keil 會(huì)根據(jù)我們左邊的配置自行生成一個(gè)分散加載文件來給鏈接器使用(這個(gè)文件就在我們的編譯輸出指定的目錄中)。上圖的示例就是沒有使用 Keil 默認(rèn),而是通過自己指定的分散加載文件生成鏡像文件。

    ??以上的 Keil 配置,最終是通過鏈接器的參數(shù) --scatter=filename 來讓鏈接器使用該文件的。分散加載文件一次性描述了我們的鏡像文件怎么布局。了解鏈接器的應(yīng)該知道,鏈接器還有一些獨(dú)立使用的和鏡像文件生成有關(guān)的參數(shù):--first, --last, --partial, --reloc, --ro_base, --ropi,--rosplit, --rw_base, --rwpi, --split, --startup, --xo_base, and --zi_base.,如果使用了 --scatter=filename,則以上參數(shù)就不可再用了! Keil 就是直接使用的 --scatter=filename。(默認(rèn)下,Keil 根據(jù)配置界面的配置,會(huì)成一個(gè)分散加載文件)。

    接下來以一個(gè)示例來看看 map 文件中關(guān)于鏡像內(nèi)存映射的內(nèi)容,如下圖:

    • Image Entry point: 這個(gè)是鏡像的入口點(diǎn)。就是鏡像在被執(zhí)行時(shí),開始的位置(地址)。

    • Load Region LR_IROM1: 表示一個(gè)叫做 LR_IROM1 加載域

      • Base:0x0800c000 這個(gè)表示 LR_IROM1 的基地址
      • Size:0x0000c6ec 表示 LR_IROM1 的大小為 0x0000c6ec,單位字節(jié)。
      • Max:0x00014000 表示 LR_IROM1 的最大大小,單位字節(jié)。這個(gè)是由分散加載文件中指定,如果不顯示指出,默認(rèn)為 0xFFFFFFFF
      • ABSOLUTE 表示地址為絕對(duì)地址
      • COMPRESSED[0x0000b9a4] 表示壓縮之后的大小為 0x0000b9a4,單位字節(jié)。
    • Execution Region ER_IROM1、Execution Region ER_IROM2、Execution Region ER_IROM3: 這是 3 個(gè)執(zhí)行域,分別叫做 ER_IROM1、ER_IROM2、ER_IROM3。下面以 ER_IROM1 為例,來說說每個(gè)列(字段)的含義:

      • Exec base:0x0800c000 這個(gè)表示 ER_IROM1 執(zhí)行時(shí)的基地址
      • Load base:0x0800c000 該執(zhí)行域?qū)?yīng)的加載域地址是 0x0800c000
      • Size: 0x000001c8 表示該執(zhí)行域的大小為 0x000001c8,單位字節(jié)
      • Max: 0x00014000 表示該執(zhí)行域的最大大小為 0x00014000,單位字節(jié)。這個(gè)是由分散加載文件中指定,如果不顯示指出,默認(rèn)為 0xFFFFFFFF
      • ABSOLUTE 表示地址為絕對(duì)地址

      為什么有 3 個(gè)?因?yàn)槲冶旧硎褂昧俗约簩懙姆稚⒓虞d文件。手動(dòng)指定了三個(gè)執(zhí)行域。我的分散加載文件如下

      ; ************************************************************* ; *** Scatter-Loading Description File generated by uVision *** ; *************************************************************LR_IROM1 0x0800C000 0x00014000 { ; load region size_regionER_IROM1 0x0800C000 0x00014000 { ; load address = execution address*.o (RESET, +First) ; 中斷向量表}ER_IROM2 + 0 { ; 應(yīng)用程序信息*.o (SECTION_APP_INFO, +First)}ER_IROM3 + 0 { ; 初始化相關(guān)代碼+其他代碼*(InRoot$$Sections) ; 初始化相關(guān).ANY (+RO) ; 其他所有代碼}RW_IRAM1 0x20000000 0x00008000 { ; 內(nèi)存.ANY (+RW +ZI)} }

      ??在這三個(gè)執(zhí)行域中,有很多類型為 PAD 的行,并且這些行沒有節(jié)名字也沒有所屬的模塊。這些其實(shí)是一些鏈接器自己添加的對(duì)齊。除了對(duì)齊沒有其他作用。關(guān)于對(duì)齊本文之前的章節(jié)有介紹。除了 PAD 之外,剩下的就全是 Code 了。

    • Execution Region RW_IRAM1: 一個(gè)名為 RW_IRAM1 的執(zhí)行域。括號(hào)中的內(nèi)容含義與上面的相同

      這個(gè)就對(duì)應(yīng)我們的內(nèi)存部分,存放我們的代碼中用到的各種變量數(shù)據(jù)(常量數(shù)據(jù)在以上的 ER_IROM 中)。同樣,該部分也有些對(duì)齊,除此之外全部是 Data、Zero、 HEAP(堆)、STACK(棧)。還有一點(diǎn)就是,.bss 數(shù)據(jù)沒有加載域地址

    最后在說明一下每一列(字段)的具體含義如下::

    Base AddrSizeTypeAttrIdxE Section NameObject
    節(jié)的基地址節(jié)的大小類型屬性索引節(jié)的名字對(duì)象(節(jié)所屬的文件模塊)

    Image component sizes

    該部分列出了組成鏡像的各部分內(nèi)容的大小等詳細(xì)信息。主要有三部分組成:用戶文件大小信息、庫文件大小信息、匯總信息。

    每一行表示一個(gè)模塊,其中各列的具體含義如下:

    • Code (inc. data): 這對(duì)應(yīng)兩列數(shù)據(jù),分別表示代碼占用的字節(jié)數(shù)和代碼中內(nèi)聯(lián)數(shù)據(jù)占用的字節(jié)數(shù)。inc. data 是內(nèi)聯(lián)數(shù)據(jù)(inline data)的縮寫。 內(nèi)聯(lián)數(shù)據(jù)包括文字池和短字符串等。例如,上圖中第一行:表示 bh1750fvi.o 中代碼有 700 字節(jié),其中內(nèi)聯(lián)數(shù)據(jù) 40 字節(jié)。
    • RO Data: 模塊中 RO 數(shù)據(jù)占用的字節(jié)數(shù)。這是除去 Code(inc. data)列中 inc. data 數(shù)據(jù)外的只讀數(shù)據(jù)的字節(jié)數(shù)。 例如,我們定義的 const 數(shù)組!
    • RW Data: 模塊中 RW 數(shù)據(jù)占用的字節(jié)數(shù)。
    • ZI Data: 模塊中 ZI 數(shù)據(jù)占用的字節(jié)數(shù)。
    • Debug: 模塊中調(diào)試數(shù)據(jù)占用的字節(jié)數(shù)。例如,調(diào)試用的輸入節(jié)以及符號(hào)和字符串表。
    • Object Name: 對(duì)象文件的名字。
    • 特殊行的含義如下:
      • Object Totals: 它所在的行就是對(duì)各列數(shù)據(jù)的匯總。
      • (incl. Generated): armlink 在生成鏡像文件時(shí),可能會(huì)產(chǎn)生一些額外數(shù)據(jù)(interworking veneers, and input sections such as region tables)。如果存在這些額外數(shù)據(jù),那么他們就位于該行中顯示。
      • Library Totals: 顯示當(dāng)前用戶代碼使用的庫文件中的各成員占用的字節(jié)數(shù)。
      • (incl. Padding): armlink 會(huì)插入填充以強(qiáng)制部分對(duì)齊。 如果 Object Totals 行中包含此類數(shù)據(jù),則會(huì)在相關(guān)的(incl. Padding)行中顯示出 armlink 添加的對(duì)齊占用的字節(jié)數(shù)。 同樣,如果 Library Totals 行中包含此類數(shù)據(jù),則會(huì)在其關(guān)聯(lián)的行中顯示。
      • Grand Totals: 鏡像文件中所有模塊的每一列數(shù)據(jù)的總大小。
      • ELF Image Totals: 如果使用 RW 數(shù)據(jù)壓縮(默認(rèn)值)來優(yōu)化 ROM 大小,則最終鏡像的大小會(huì)發(fā)生變化,這會(huì)反映在 --info 的輸出中。 比較 Grand Totals 和 ELF Image Totals 下的字節(jié)數(shù),以查看壓縮效果。
      • ROM Totals: 顯示包含鏡像所需的 ROM 的最小大小。 這其中不包括未存儲(chǔ)在 ROM 中的 ZI 數(shù)據(jù)和調(diào)試信息。

    用戶文件大小信息

    第一部分就是用戶源碼各模塊的大小信息!如下圖所示:

    庫文件大小信息

    第二部分用戶源碼中使用的各 C 庫模塊的大小信息以及使用的 C 庫文件名!如下圖所示:

    這部分中,除了列出了庫文件的獨(dú)立單元模塊的大小,還列出了我們的源碼中實(shí)際使用的庫文件。這個(gè)會(huì)根據(jù)我們?cè)创a中引用的庫函數(shù)的不同而變化。

    匯總信息

    主要就是各部分?jǐn)?shù)據(jù)的匯總大小,如下圖所示

    其中最下面的三行數(shù)據(jù)是匯總的再匯總,以方便我們的使用

    • Total RO Size: 就是我們的可執(zhí)行程序中常量數(shù)據(jù)(代碼和只讀數(shù)據(jù))的大小。
    • Total RW Size: 就是我們的可執(zhí)行程序中需要占用的內(nèi)存的大小。
    • Total ROM Size: 就是我們的可執(zhí)行程序本身的大小。這個(gè)大小就等于我們的可執(zhí)行文件的大小。

    ??需要特殊注意的是,armlink 輸出的是 .axf 文件,這個(gè)文件中包含調(diào)試信息,并不是我們需要使用的可執(zhí)行文件,我們使用 fromelf 工具從中提取的文件才是真正的可執(zhí)行文件。這里的匯總大小指定是實(shí)際使用的可執(zhí)行文件的大小。關(guān)于這部分,參考博文ARM 之一 ELF文件、鏡像(Image)文件、可執(zhí)行文件、對(duì)象文件 詳解。

    ARM 庫文件

    我們可以在 ARM 編譯套件的目錄下找到這兩個(gè)文件,路徑如下圖所示:

    下面我們使用 ARM 編譯套件中相應(yīng)的工具來看看具體文件。關(guān)于編譯套件的詳細(xì)使用說明可以參考博文《ARM 之 主流編譯器(armcc、iar、gcc for arm)詳細(xì)介紹》。具體使用的工具就是armar.exe,這是 ARM 的庫文件管理工具。

    D:\ARM\ARM_Compiler_5.06u4>armar --zt ./lib/armlib/c_w.lCode RO Data RW Data ZI Data Debug Object Name48 0 0 0 84 version.o58 0 0 0 68 __dczerorl.o90 0 0 0 68 __dczerorl2.o100 0 0 0 68 __dclz77c.o0 0 28 0 0 dc.o102 12 0 0 240 sys_io.o18 0 0 0 76 sys_tmpnam.o32 0 4 0 84 sys_clock.o18 0 0 0 76 sys_time.o12 0 0 0 68 sys_exit.o4 8 0 0 0 __rtentry3.o6 8 0 0 0 __rtentry4.o8 24 0 0 0 __rtentry5.o8 24 0 0 0 __rtentry6.o............省略一大部分...........104 0 0 0 84 __printf.o6 0 0 0 0 _printf_a.o0 0 0 0 0 _printf_percent.o4 0 0 0 0 _printf_percent_end.o6 0 0 0 0 _printf_lli.o6 0 0 0 0 _printf_lld.o6 0 0 0 0 _printf_llu.o52 0 0 0 80 vsscanf.o60 0 0 0 84 swscanf.o52 0 0 0 80 vswscanf.o52 0 0 0 80 __ARM_vsscanf.o32 0 0 0 84 scanfn.o24 0 0 0 84 fscanfn.o60 0 0 0 84 sscanfn.o............省略一大部分...........16 0 0 0 80 vfwscanf.o28 0 0 0 68 _chval.o884 0 0 0 100 _scanf.o342 0 0 0 100 _scanf_longlong.o332 0 0 0 96 _scanf_int.o224 0 0 0 96 _scanf_str.o1202 0 0 0 216 scanf_fp.o............省略一大部分...........8 0 0 0 68 feof.o8 0 0 0 68 ferror.o100 0 0 0 120 fflush.o26 0 0 0 136 fgetc.o32 0 0 0 80 fgetpos.o74 0 0 0 84 fgets.o570 0 0 0 132 filbuf.o470 0 0 0 88 flsbuf.o28 0 0 0 136 fputc.o34 0 0 0 80 fputs.o58 0 0 0 88 fread.o248 0 0 0 84 fseek.o40 0 0 0 80 fsetpos.o66 0 0 0 76 ftell.o50 0 0 0 84 fwrite.o4 0 0 0 68 getc.o12 0 0 0 68 getchar.o56 0 0 0 80 gets.o60 0 0 0 80 perror.o4 0 0 0 68 putc.o12 0 0 0 68 putchar.o312 0 0 0 112 initio.o236 0 0 0 128 fopen.o............省略一大部分...........18 0 0 0 80 exit.o22 0 0 0 80 abort.o4 0 0 0 68 _Exit.o............省略一大部分...........20 0 0 0 68 strchr.o32 0 0 0 80 strcspn.o36 0 0 0 76 strncat.o30 0 0 0 76 strpbrk.o............省略一大部分...........14 0 0 0 80 ctime.o4 0 0 0 68 gmtime.o12 0 0 44 68 localtime.o428 0 0 0 116 mktime.o864 0 0 0 184 strftime.o0 12 0 0 0 _monlen.o0 0 0 0 0 asctime_r.o0 0 0 0 0 localtime_r.o104 0 0 0 88 asctime_internal.o184 0 0 0 80 localtime_internal.o............省略一大部分...........8 0 0 0 68 __main.o52 0 0 0 68 __scatter.o76 0 0 0 68 __scatters.o26 0 0 0 68 __scatter_copy.o28 0 0 0 68 __scatter_zi.o............省略一大部分...........34 0 0 0 76 prim_new.o2 8 0 0 68 init.o36 8 0 0 80 init_aeabi.o44 8 0 0 76 arm_relocate.o36 8 0 0 80 preinit_aeabi.o4 0 0 0 68 _memcpy.o8 0 0 0 84 _urdwr4.o............省略一大部分...........112 0 0 0 104 fputwc.o36 0 0 0 80 fputws.o200 0 0 0 104 fgetwc.o82 0 0 0 84 fgetws.o4 0 0 0 68 getwc.o12 0 0 0 68 getwchar.o73526 40563 112 1686 76484 TOTALENTRY at offset 1 in section !!!main of __main.o

    從中我們可以看到有__main.o等文件,接下來我們可以使用armar -x命令將c_w.l解壓出以上全部文件,然后使用fromelf來查看__main.o的詳細(xì)信息,這里就不一一嘗試了!

    參考

  • ARM 的鏈接器用戶手冊(cè):ARM? Compiler v5.06 for μVision? armlink User Guide
  • ARM 的編譯器用戶手冊(cè):ARM? Compiler v5.06 for μVision? armcc User Guide
  • 總結(jié)

    以上是生活随笔為你收集整理的ARM 之十 ARMCC(Keil) map 文件(映射文件)详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    久久久国产精品亚洲一区 | 日本精品久久久久中文字幕5 | 午夜精品中文字幕 | 午夜视频久久久 | 国产裸体bbb视频 | 欧美成人91 | 少妇18xxxx性xxxx片 | 中文字幕亚洲精品日韩 | 开心激情综合网 | 欧美日韩免费看 | 欧美成人在线免费观看 | 国产1区2区3区精品美女 | 日韩精品一区电影 | 天天操天天干天天爽 | 久要激情网 | 精品国产免费人成在线观看 | 激情电影影院 | 97人人网 | 国内丰满少妇猛烈精品播放 | 欧美日韩后 | 成人黄色在线看 | 五月婷婷免费 | 88av视频 | 久久免费视频一区 | 久久中文欧美 | 国产很黄很色的视频 | 久久国产午夜精品理论片最新版本 | 五月婷影院 | 国产精品入口麻豆www | 精品在线视频观看 | 欧美99久久 | 视频在线观看亚洲 | 青青久草在线 | 久久久久久网址 | 在线观看亚洲精品视频 | 亚洲福利精品 | 四虎国产精品免费 | 午夜视频福利 | 国产免费久久av | www.干| 久久毛片视频 | 一区二区三区精品在线视频 | 九色91在线视频 | 色欧美88888久久久久久影院 | 成人一级免费视频 | avwww在线观看 | 久久国产精品久久w女人spa | 国产中文字幕国产 | ww视频在线观看 | 欧美视频日韩视频 | 91在线文字幕 | 成人在线观看日韩 | 亚洲国产精品va在线看黑人 | 日韩激情影院 | 日日夜操 | 中文字幕九九 | 91.精品高清在线观看 | 午夜精品久久久久久久99热影院 | 成人午夜性影院 | 九九免费在线看完整版 | 亚洲色图27p | 天天视频色版 | 91av在线免费 | 一区二区久久久久 | 亚洲在线网址 | 波多野结衣电影一区二区 | 色的网站在线观看 | 久久久综合电影 | 国产成人福利在线 | 香蕉视频一级 | 国产色妞影院wwwxxx | 麻豆va一区二区三区久久浪 | 日本中文字幕在线播放 | 伊人国产在线播放 | 国产精品video爽爽爽爽 | 999免费视频| 亚洲成a人片综合在线 | 久久亚洲婷婷 | 2021久久| 97在线精品国自产拍中文 | 国产小视频在线观看 | 激情网在线观看 | 在线小视频你懂得 | 中文字幕文字幕一区二区 | 久久午夜鲁丝片 | 手机色站 | 日批视频在线观看免费 | 日韩高清一 | 日韩在线观看中文 | 日韩av播放在线 | 免费一区在线 | 免费观看一级视频 | 成人在线观看av | 日本aa在线 | 国产精品久久久久久久久久了 | 午夜10000 | 在线观看黄网站 | av成人免费在线观看 | 欧美一区二区三区免费观看 | 成人网色| 久草免费在线 | 91精品国产自产91精品 | 亚洲三级黄色 | 日韩午夜三级 | 黄色av电影一级片 | 亚洲黄色小说网 | 中文字幕精品在线 | 91资源在线视频 | 99久久99久久精品 | 99精品视频在线免费观看 | 人人搞人人干 | 亚洲精品乱码久久久久久蜜桃欧美 | 国产精品你懂的在线观看 | 日韩簧片在线观看 | 96国产精品视频 | 久产久精国产品 | 国产日本在线观看 | 毛片网免费| 欧美伦理一区二区 | 成人91av| 国产精品久久久久久久免费大片 | 久久不卡免费视频 | 久久国产一二区 | 最近日韩中文字幕中文 | 国产特级毛片aaaaaa毛片 | 91视频 - 88av| 久草免费看| 国内精品国产三级国产aⅴ久 | 久久99精品久久久久久清纯直播 | 久久精品欧美 | 天天操婷婷 | 免费a网址 | 高清av中文在线字幕观看1 | 91视频免费看网站 | 亚洲午夜精品一区 | 免费试看一区 | 精品国产乱码久久久久久久 | 亚洲电影久久 | 丁香视频全集免费观看 | 亚洲,国产成人av | 色久av| 91大神精品视频在线观看 | 国产精品99久久久久久有的能看 | 99久热精品| 国产一区电影在线观看 | 日韩欧美一区二区三区黑寡妇 | 亚洲码国产日韩欧美高潮在线播放 | 91九色在线视频观看 | 日韩高清一二区 | 亚洲欧美日韩精品久久奇米一区 | 国产免费片 | 九九色综合| 国产成人av网址 | 久久久国产一区二区三区四区小说 | 日日碰夜夜爽 | 射久久久 | 国产美女久久 | 亚洲 欧美 国产 va在线影院 | 一区精品在线 | 97在线视频观看 | 在线观看黄网 | av免费网站在线观看 | 国产黄a三级 | 亚洲综合在线播放 | 激情av网| 视频在线观看一区 | 日韩免费在线观看视频 | 四虎4hu永久免费 | 色婷婷av在线 | av中文字幕网址 | 天天草天天摸 | 久久久久久久久久久黄色 | 天堂av免费看 | 天天干天天操天天入 | 欧美一级免费高清 | 五月天色中色 | 免费看污污视频的网站 | 国产自在线| 久久久国产精品成人免费 | 亚洲成人国产精品 | 91精品国产一区二区在线观看 | 久久久久久久久久久久久9999 | 狠狠色丁香久久综合网 | 国产91全国探花系列在线播放 | 黄色国产在线 | 天天爽夜夜操 | 成人一级影视 | 久久天天躁狠狠躁亚洲综合公司 | 亚洲精品日韩在线观看 | www中文在线 | 久草免费新视频 | 亚洲综合精品在线 | 91麻豆精品国产午夜天堂 | 六月丁香激情网 | 91精品91 | 国色天香在线 | 婷婷综合亚洲 | 国产精品99久久久精品免费观看 | 成 人 免费 黄 色 视频 | 一区二区男女 | 国产精品一区二区三区在线播放 | 免费91麻豆精品国产自产在线观看 | 色婷婷电影 | 成人毛片一区 | 狠狠色综合网站久久久久久久 | 久久久久久在线观看 | 国产视频在线观看一区 | 日本中文字幕在线看 | 欧美日韩在线观看视频 | 成人91在线观看 | 色九色| 免费久久网| 97在线精品| 欧美一级片免费观看 | 91久久奴性调教 | www天天干com | 婷婷伊人五月 | 91精品国产自产在线观看永久 | 久久a v电影 | 韩日成人av | 成人9ⅰ免费影视网站 | 在线成人av | 亚洲精品视频大全 | 婷婷五月在线视频 | 久二影院 | 中文字幕免费观看全部电影 | 日韩av二区 | 天天色棕合合合合合合 | 国产精品丝袜久久久久久久不卡 | 国产精品福利无圣光在线一区 | 日本中文字幕电影在线免费观看 | 久热色超碰| 日韩av在线免费看 | 在线亚洲天堂网 | 天天摸日日摸人人看 | 在线观看 国产 | 在线成人国产 | 一级黄色片在线免费观看 | 国产伦精品一区二区三区四区视频 | 黄色www免费 | 特黄免费av | 国产精品亚洲人在线观看 | av动图| 成人小视频在线免费观看 | 2019天天干天天色 | 视频在线播放国产 | 香蕉在线观看视频 | 综合久色 | a级一a一级在线观看 | 99精品视频在线观看播放 | 一区二区视频在线观看免费 | 国产精品久久久久久久久久免费看 | 911香蕉视频 | www久久久 | 日韩欧美69 | 五月婷婷伊人网 | 91香蕉视频 | 在线观看免费av网站 | 视频一区二区免费 | 丁香花在线观看免费完整版视频 | 日本一区二区三区免费观看 | 欧美污网站| 毛片网站在线 | 99久久精品免费看国产 | 亚洲毛片在线观看. | 黄色免费av | 亚洲精品一区二区久 | 久久免费国产精品1 | 亚洲 欧美 国产 va在线影院 | 一区二区三区手机在线观看 | 色成人亚洲| 天天天干天天射天天天操 | 日韩在线看片 | 日韩久久久久 | 国偷自产中文字幕亚洲手机在线 | 欧美另类高清 | 久久伊人婷婷 | 日韩欧美有码在线 | 国产91全国探花系列在线播放 | 久久久国产影视 | 青草视频在线播放 | 中文视频在线看 | 国产精品视频永久免费播放 | 久草在线精品观看 | 99精品久久只有精品 | 91天堂影院| 97超碰伊人 | 91精选在线观看 | 国产日韩欧美在线观看视频 | 91网免费观看 | 国产精品女视频 | 久草电影免费在线观看 | 国内精品久久久久影院一蜜桃 | 丁香婷婷激情五月 | 国产呻吟在线 | 久草在线视频看看 | 四虎影视精品永久在线观看 | 国产不卡免费 | 97超碰在| 亚洲欧洲中文日韩久久av乱码 | 久久国产亚洲 | 欧美日韩另类在线观看 | 欧洲在线免费视频 | 国产精品初高中精品久久 | 日韩av免费一区二区 | 亚洲欧洲精品久久 | 久久久久一区二区三区四区 | 久久久久久久久免费视频 | 丁香六月中文字幕 | 亚洲成a人片在线观看网站口工 | 在线观看国产成人av片 | av中文字幕在线观看网站 | 一区二区三区在线观看 | 视频在线观看91 | 久久艹99 | 欧美亚洲精品在线观看 | 97超碰人人澡人人 | 丁香 婷婷 激情 | 国产视频999 | 亚洲国产精品电影在线观看 | 国产手机在线观看视频 | 日韩精品视频在线观看网址 | 依人成人综合网 | 99久久精品免费看国产一区二区三区 | 99久久婷婷国产一区二区三区 | 亚洲综合小说电影qvod | 免费中文字幕视频 | 国产成人61精品免费看片 | 久久永久视频 | 婷婷六月天综合 | 99久久精品久久久久久动态片 | 在线观看中文字幕亚洲 | 中文在线最新版天堂 | 人人爽人人澡人人添人人人人 | 亚洲性xxxx | 亚洲另类在线视频 | 免费一级特黄录像 | 成人av片免费看 | 亚一亚二国产专区 | 国产成视频在线观看 | 国产精品一区二区久久精品爱微奶 | 天天爱天天操 | 亚洲国产字幕 | 日日夜日日干 | 国产成人黄色在线 | 日韩黄色大片在线观看 | 亚洲三区在线 | 97色婷婷成人综合在线观看 | 黄色影院在线免费观看 | 日韩大片在线免费观看 | 日日夜夜操av| 96av麻豆蜜桃一区二区 | 天天曰夜夜爽 | 国产福利91精品一区 | 18国产精品白浆在线观看免费 | 成人免费在线电影 | 日韩精品一区二区三区不卡 | 亚洲日本欧美在线 | 月下香电影 | 亚洲高清av | 在线观看亚洲国产 | 亚洲综合成人婷婷小说 | 日韩毛片在线播放 | 国产69精品久久久久9999apgf | 国产一区网址 | 日韩在线免费不卡 | 久久免费视频这里只有精品 | 在线播放 日韩专区 | 欧美久草视频 | 中国一级片在线播放 | 人人爱爱人人 | 日韩免费一区二区 | 国产视频在线观看一区 | 最近日本mv字幕免费观看 | 一级黄色大片在线观看 | 色偷偷888欧美精品久久久 | 五月婷婷操 | 精品在线观看一区二区三区 | 成人av观看 | 中文字幕一区二区三区视频 | 天天玩天天干天天操 | 国产这里只有精品 | 色哟哟国产精品 | 香蕉色综合 | 欧美日韩国产精品爽爽 | 亚洲一区二区三区在线看 | 亚洲欧洲国产日韩精品 | 国色天香av | 国产精品久久久久永久免费 | 午夜视频一区二区三区 | 国产a网站| 日韩精品1区2区 | 中文字幕视频在线播放 | 成人av在线一区二区 | 日韩中文字幕一区 | 国产精品入口a级 | 国内成人综合 | 日韩在线观 | 久国产在线播放 | 国产xxxx做受性欧美88 | 国产丝袜美腿在线 | 亚洲精品国产精品乱码在线观看 | 成人羞羞视频在线观看免费 | 欧美一级黄色网 | 最近中文字幕在线播放 | 天天干天天干天天射 | 免费在线一区二区 | 日韩av女优视频 | 日韩欧美在线观看 | 91完整版在线观看 | 天天射综合网视频 | 国产一级片网站 | 91高清视频 | 日韩av影视 | 久久天天综合网 | 国产乱对白刺激视频在线观看女王 | 国产精品亚洲片夜色在线 | 国产综合在线视频 | 狠狠狠色丁香婷婷综合久久五月 | 久草视频99 | 久久一级电影 | 亚洲精品www. | 久久看免费视频 | 青青草国产精品视频 | 欧美精品黑人性xxxx | 狠狠久久婷婷 | 九九热在线免费观看 | 91av在线播放视频 | 丁香5月婷婷 | 日韩性片 | 福利视频入口 | 国产精品久久久久久影院 | 丁香花在线观看视频在线 | 在线播放视频一区 | 超碰公开在线 | 成人毛片一区 | 午夜精品久久久久久久99 | 中文字幕av免费在线观看 | 一区二区激情 | 国产分类视频 | 波多野结衣在线播放视频 | 97香蕉久久国产在线观看 | 欧美孕妇与黑人孕交 | 亚洲精品午夜久久久 | 日韩v欧美v日本v亚洲v国产v | 日本黄色一级电影 | 91看片在线观看 | 天天综合日 | 日韩二区精品 | 色综合久 | 午夜免费久久看 | 国产一级视屏 | 亚洲精品国产综合久久 | 色噜噜狠狠狠狠色综合久不 | 欧美成人亚洲 | 黄色a一级视频 | 天天艹天天干天天 | 五月天综合网站 | 黄色com | 九九视频网 | 在线天堂中文www视软件 | 黄a网 | 久久综合狠狠狠色97 | 日韩精品视频在线观看网址 | 欧美福利片在线观看 | 韩日电影在线观看 | 国内偷拍精品视频 | av日韩精品 | 天天爽人人爽夜夜爽 | 欧美综合色 | 欧美日韩1区 | 久草视频视频在线播放 | 国产午夜精品一区 | 久久99精品久久久久久清纯直播 | 奇米四色影狠狠爱7777 | 久久夜色精品国产欧美一区麻豆 | 中文字幕在线观看你懂的 | 国产成人久久av免费高清密臂 | 99热精品国产一区二区在线观看 | 丁香资源影视免费观看 | 国产日韩精品一区二区三区在线 | 在线亚洲欧美日韩 | 成人久久精品视频 | 国产黄在线 | 日本在线视频一区二区三区 | 久草免费在线观看 | 亚洲国产成人精品久久 | 一区在线观看视频 | 999久久国产精品免费观看网站 | 中文字幕精品一区二区三区电影 | 伊人在线视频 | 激情小说网站亚洲综合网 | 日本在线观看一区 | 国产精品精品国产婷婷这里av | 日躁夜躁狠狠躁2001 | 97av色 | 久久经典国产 | 婷婷丁香激情综合 | 一本一本久久a久久精品综合妖精 | 国产九九在线 | 亚洲人成在线电影 | 91精品爽啪蜜夜国产在线播放 | 成年人黄色大片在线 | 啪啪免费观看网站 | 免费精品| 97人人模人人爽人人少妇 | 日日夜夜国产 | 久草精品视频 | 99久久精品视频免费 | 有码中文字幕 | 亚洲欧洲av在线 | 亚洲欧美日韩国产精品一区午夜 | 成人免费在线观看入口 | 国产精品1000 | 亚洲精品国产精品国自产观看浪潮 | 国产在线中文字幕 | 久久精品aaa | 超碰国产在线 | 色婷婷电影网 | 色婷婷免费| 国产精品福利在线观看 | 久久精品免费电影 | 毛片视频电影 | 国产视频一区在线 | 激情视频一区二区三区 | 久久96国产精品久久99软件 | a视频在线播放 | 欧美激情xxxx性bbbb | 亚洲综合欧美日韩狠狠色 | 国产一区二区中文字幕 | 国产99久久久久 | 2023国产精品自产拍在线观看 | 免费精品久久久 | 成人啊 v | 午夜色大片在线观看 | 黄色av电影在线观看 | 国产成人1区 | 久久视频精品在线观看 | 成全在线视频免费观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 日韩色高清 | 97日日碰人人模人人澡分享吧 | 国产美女在线免费观看 | 最新中文在线视频 | 偷拍视频一区 | 国产999| 国产精品18毛片一区二区 | 麻豆久久精品 | 国产精品久久久久久久久久99 | 九九热在线视频免费观看 | 久草新在线 | 亚洲色图22p| 99精品久久精品一区二区 | 精品久久久久久久久久久久久久久久 | 亚洲国产中文字幕在线观看 | 天天干天天操天天射 | 欧洲色综合| 国产字幕在线播放 | 91cn国产在线| 日韩动态视频 | 91精品欧美一区二区三区 | 国产精品久久久久久久久久久免费看 | 91精品色| 黄色一集片 | 狠狠色狠狠色综合日日小说 | 亚洲一区二区视频在线播放 | 色婷婷中文 | 91大神精品视频在线观看 | 九九久久久久久久久激情 | 久久久久久久影视 | 最新高清无码专区 | 国产在线黄 | 特黄免费av| 日韩羞羞| 黄色av一区二区 | 日韩影视大全 | 久久久免费精品视频 | 免费色视频网站 | 91精彩在线视频 | 天天干,天天操,天天射 | 欧美成人69av| 在线av资源 | 亚洲国内在线 | 91丨九色丨高潮 | 免费a级毛片在线看 | 色五丁香 | 一性一交视频 | 麻豆国产精品视频 | 色先锋av资源中文字幕 | 午夜免费久久看 | 最近更新的中文字幕 | 免费三级a | 国产一级91 | 四虎最新入口 | 中文字幕在线色 | 国产又粗又硬又长又爽的视频 | 九九热在线视频 | aaa毛片视频| 一级黄色免费 | 中文字幕在线国产 | 国产福利91精品 | 97在线观看免费观看高清 | 久久午夜电影院 | 96国产在线 | www国产亚洲精品久久网站 | 亚洲国产精品500在线观看 | 色欧美88888久久久久久影院 | 特黄特色特刺激视频免费播放 | 欧美少妇xxxxxx | 色综合久久66 | 五月天激情综合网 | 免费福利视频导航 | 国产精品视频专区 | 不卡电影免费在线播放一区 | av三级av | 亚洲色影爱久久精品 | 伊人狠狠色 | 久久一区二区免费视频 | 免费看日韩 | 精品成人网 | 黄色资源在线 | 亚洲精品乱码久久久久久蜜桃不爽 | 亚洲成av | 天天爽夜夜爽人人爽一区二区 | 国产精品av在线免费观看 | 最新超碰| 精品视频97 | 色婷丁香| 中文字幕在线观看完整 | 日日麻批40分钟视频免费观看 | 91av亚洲 | 免费黄色激情视频 | 欧美在线观看视频一区二区 | 久草视频免费 | 91香蕉视频色版 | 国产成人精品在线观看 | 国产麻豆视频 | 日韩高清免费无专码区 | 精品久久久久久亚洲 | 激情视频免费在线观看 | 久久夜靖品 | 蜜臀aⅴ国产精品久久久国产 | 久久一区二区三区国产精品 | 亚洲视频第一页 | 国产精品女同一区二区三区久久夜 | 精品国产免费一区二区三区五区 | av丝袜制服 | 欧洲成人免费 | 亚欧日韩成人h片 | 激情五月开心 | 午夜精品久久久久久久爽 | 操操日 | 在线免费黄色av | 国产黄免费在线观看 | av中文字幕第一页 | 奇米影视8888 | 999在线观看视频 | 亚洲播放一区 | 日韩区欠美精品av视频 | 欧美日韩国产在线观看 | 精品久久久久国产免费第一页 | 97超碰站| 香蕉网在线 | 99久久99视频 | 亚洲精品资源在线观看 | 亚洲成年人在线播放 | 国内精品小视频 | 九色视频网站 | 97视频网址 | 麻豆国产在线播放 | 久久久久久久久久久电影 | 日韩在线视频网站 | 天天草天天干天天 | 在线观看91网站 | 96在线 | 日韩精品一区二区三区免费视频观看 | 午夜在线观看影院 | 欧美日韩精品综合 | 免费在线播放av电影 | 国产91精品看黄网站 | www.xxx.性狂虐| av中文在线影视 | 日韩av在线免费播放 | 久久99热这里只有精品 | 久久亚洲国产精品 | 九九视频网 | 精品国产123 | 午夜在线免费观看视频 | 久久免费视频网站 | 麻豆国产在线视频 | 久久香蕉国产精品麻豆粉嫩av | 国产精品国产三级国产aⅴ9色 | 国产精品久久久一区二区三区网站 | 亚洲成人av在线电影 | 亚洲精品乱码久久久久久写真 | 久爱精品在线 | 中文字幕在线中文 | 丝袜足交在线 | 日韩欧美在线高清 | 美女网站一区 | 97高清视频 | .国产精品成人自产拍在线观看6 | 国产麻豆精品95视频 | 久久国产露脸精品国产 | 性色av免费看 | 亚洲综合精品视频 | 91精品中文字幕 | 在线播放 亚洲 | 欧美一级片免费在线观看 | 天天操操操操操操 | 成人91在线| 国产美女网站在线观看 | 在线免费视频一区 | 国产自产高清不卡 | 成人免费观看a | 美女视频久久久 | 欧洲一区二区在线观看 | 521色香蕉网站在线观看 | 欧美日韩国产在线 | 国产精品久久久久久久av大片 | 天天操天天干天天综合网 | 欧美日韩性 | 亚洲aⅴ乱码精品成人区 | 夜夜躁日日躁狠狠久久88av | 爱情影院aqdy鲁丝片二区 | 午夜私人影院久久久久 | 国产免费作爱视频 | 在线看成人 | 日本在线观看中文字幕 | 一本一本久久a久久 | 最新国产精品亚洲 | 国产专区在线播放 | 婷婷久久一区 | 91视频免费看片 | 久久免费大片 | 超碰在线最新 | 亚洲一区二区天堂 | 日日夜夜艹| 亚洲第一区在线观看 | 在线一级片 | av在线免费播放网站 | 欧美va天堂va视频va在线 | 日韩久久久久久久 | 一区 二区 精品 | 国产一级性生活 | 成人免费观看视频大全 | 亚洲激情校园春色 | 在线影院中文字幕 | 天天操天天射天天插 | 三级av在线免费观看 | 色婷婷狠狠操 | 色综合激情网 | 免费看v片网站 | 黄色网址国产 | 午夜手机看片 | 色婷婷久久一区二区 | 午夜久草 | 国产精品一区专区欧美日韩 | 午夜视频在线观看网站 | 久久国产经典 | 在线97 | 欧美国产高清 | 在线色亚洲 | 日韩在线三级 | 国产3p视频 | 美女视频黄在线观看 | 午夜精品一区二区三区四区 | 免费久久99精品国产 | 在线v| 久久国内精品 | 91在线视频免费播放 | 免费十分钟 | 国产精品普通话 | av软件在线观看 | 久久精品9 | 2018好看的中文在线观看 | 五月天激情开心 | 国产精品岛国久久久久久久久红粉 | 久久免费视频一区 | 久久极品| 国产高清在线观看 | 国产资源网 | 国产精品第54页 | 国产在线播放一区二区三区 | 亚洲国产高清在线观看视频 | 国产伦理久久精品久久久久_ | 欧美性生活久久 | 国产黄a三级 | 精品免费视频. | 91桃色国产在线播放 | 在线观看视频91 | 999一区二区三区 | 精品1区二区| 玖玖国产精品视频 | 婷婷色站 | 永久黄网站色视频免费观看w | av中文字幕网址 | 精品国产伦一区二区三区观看体验 | 丁香九月激情 | 色99久久 | 玖玖在线免费视频 | 欧美成人精品在线 | 91九色在线观看视频 | av片一区二区 | 91九色丨porny丨丰满6 | 日韩国产精品一区 | 激情网婷婷 | 国产日产精品一区二区三区四区 | 国产免费嫩草影院 | 六月色婷 | 欧美日韩三级在线观看 | 日本高清久久久 | 99re视频在线观看 | 91在线观 | 三级黄色欧美 | 人人射网站 | 视频在线观看入口黄最新永久免费国产 | 激情综合中文娱乐网 | 国产小视频在线播放 | 91精品电影 | 国产精品99久久久久久宅男 | 91视频3p | 一二三区av| 92av视频| 久久久精品国产一区二区 | 久久久午夜电影 | 欧美日韩在线视频一区 | 国产一区二区电影在线观看 | 亚洲欧美成人 | 黄色免费大全 | 亚洲精品乱码久久 | 字幕网av| 久久久久伊人 | 91在线文字幕 | 欧美久久久久久久久中文字幕 | 国产精品伦一区二区三区视频 | 国产在线高清视频 | 亚洲视频免费在线观看 | 国产一区二区手机在线观看 | 久久久精品视频成人 | 99视频一区| 人人射人人爱 | 视频福利在线 | 免费在线观看成人 | 91久久奴性调教 | 亚洲精品美女久久久 | 亚洲精品美女免费 | 欧美精品久久久久 | av大片网站 | 免费在线电影网址大全 | 日韩免费高清在线观看 | 成人av高清在线 | 九九免费视频 | 另类老妇性bbwbbw高清 | 亚洲免费成人 | 亚洲涩涩涩 | 999热视频 | 精品免费久久久久久 | 99久久精品国产亚洲 | 美女网站免费福利视频 | 丰满少妇在线观看资源站 | 中文字幕久久久精品 | 久草资源在线 | 国产中文字幕精品 | 日本公妇在线观看 | 911精品视频 | 国产探花视频在线播放 | 麻豆一区在线观看 | 久久久久亚洲精品男人的天堂 | 337p欧美| 又爽又黄在线观看 | 国产糖心vlog在线观看 | 精品国产成人av在线免 | 五月婷婷激情五月 | 天天综合网国产 | 欧美孕妇视频 | 91av视频免费观看 | 97日日碰人人模人人澡分享吧 | 青青河边草手机免费 | 欧美一性一交一乱 | 日本黄色免费在线 | 国产精品福利无圣光在线一区 | 日韩大片在线 | 亚洲撸撸 | 中文字幕在线观看完整版 | 亚洲综合小说电影qvod | 美女视频一区 | 久久这里只有精品1 | 午夜色大片在线观看 | 国产毛片久久 | 色综合婷婷久久 | 日韩视频免费观看高清完整版在线 | 人人爱人人射 | 久久综合久久久 | 香蕉在线视频观看 | 久久国产美女 | 日本黄网站 | 不卡av免费在线观看 | 黄色一区二区在线观看 | 6080yy精品一区二区三区 | 97精品国产91久久久久久久 | 久久久久电影 | 亚洲精品在线免费观看视频 | 久久婷婷丁香 | 五月香婷 | 国产精品美女网站 | 日本免费一二三区 | 天天摸天天弄 | 亚洲男人天堂2018 | 亚洲精品456在线播放 | 天天操天天干天天综合网 | 国产毛片久久久 | 91在线免费公开视频 | 日韩精品免费一区二区在线观看 | 一区二区欧美在线观看 | 欧美大香线蕉线伊人久久 | 国产91在线播放 | 黄色精品久久 | 99久久综合狠狠综合久久 | 91网址在线 | 欧美日一级片 | 97超碰人人爱 | 国产99久久久精品视频 | 久草在线中文888 | 国产手机视频 | 日日夜夜精品网站 | 国产无吗一区二区三区在线欢 | 国产亚洲精品电影 | 人人爽夜夜爽 | 国产精品porn | 国产在线观看91 | 91成人免费在线视频 | www.久久久.com | 久久婷婷一区二区三区 | 婷婷色网视频在线播放 | 中文字幕91视频 | 黄网站app在线观看免费视频 | 天天色天天干天天 | 欧美极品少妇xxxx | 69av视频在线| 国产一区在线观看视频 | 亚洲免费观看在线视频 | 波多野结衣电影一区 | 色天天久久 | 婷婷六月丁香激情 | 在线蜜桃视频 | 麻豆国产精品永久免费视频 | 久久在线看| 顶级欧美色妇4khd | 丁香五香天综合情 | 国内精品久久久 | 国产精品孕妇 | 久久精品1区2区 | 国产精品毛片一区 | 91爱爱网址 | 久久久综合九色合综国产精品 | a亚洲视频 | 亚洲激情综合 | 91精品少妇偷拍99 | 成人a视频在线观看 | 欧美孕交vivoestv另类 | 中文字幕在线观看完整 | 欧美一区,二区 | 国产成人一区在线 | 色综合久久久久综合99 | 成人av片免费看 | 免费观看一区二区 | 国产免费观看视频 | 亚洲性少妇性猛交wwww乱大交 | 日b视频在线观看网址 | 亚洲精品视频在线观看视频 | 97色资源| 久久久麻豆精品一区二区 | 欧美日韩在线免费观看视频 | www久久精品 | 国产精品手机播放 | 国产精品中文久久久久久久 | 在线v| 午夜久久久久 | 在线免费观看黄网站 | 天天干,天天操 | 香蕉视频在线看 | 91免费版在线 | 在线视频欧美亚洲 | 久久精品综合 | 日韩在线二区 | 国产精品成人一区二区三区吃奶 | 成人亚洲精品国产www | 国产免费一区二区三区最新 | 午夜精品久久久久久久99婷婷 | 国产一级一片免费播放放 | 亚洲免费公开视频 | 99视频在线免费看 | 91在线观看欧美日韩 | 激情久久久久久久久久久久久久久久 | 91精品成人 | 久久久精品国产一区二区电影四季 | 日韩免费在线 |