国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析)

這篇具有很好參考價值的文章主要介紹了單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

bin、map、反匯編文件

bin文件簡介

?? .bin 文件就是二進制文件(binary file),這種文件只包含機器碼。所有的數據都是機器可以執(zhí)行的指令碼、指令參數或者常量數據,不包含其它調試信息。加載到內存或者支持XIP(就地執(zhí)行)的存儲器中規(guī)定好的加載地址之后直接從規(guī)定好的運行地址開始運行即可。
??例如單片機中燒寫的都是 .bin 文件,以STM32為例,其片內Nor FLASH的起始地址也是代碼的加載(燒寫)地址為 0x08000000 。上電復位或者手動復位之后,程序計數器PC指向單片機的復位異常的中斷向量地址 0x08000004 的位置,單片機從復位開始運行。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
??上圖就是一個bin文件的內容節(jié)選,在上圖的bin文件中左側的 Address 表示的是現在地址的相對位置,一般情況下我們都是將斌文件下載到地址 0x08000000 中,所以上文提及的 0x08000004 內存中存儲的是上圖紅色框的內容 0x080001ad (這是一個小端存儲的單片機)

msp文件簡介

??在單片機開發(fā)中,.map 文件是一種編譯過程中的輸出文件,通常由編譯器在完成代碼編譯后生成。.map 文件包含了程序中函數和變量的內存布局信息,這些信息描述了程序在內存中的位置和大小。
??這是一個函數、變量在單片機中存儲的絕對文件,可以通過該文件快速定位到單片機中某一個變量的存儲地址或者某一個函數的入口地址。通過查看 .map 文件可以確定哪些變量或函數占用了大量的內存,從而進行相應的優(yōu)化。在鏈接階段,.map 文件用于確定程序中各個函數和變量的最終地址。鏈接器使用 .map 文件來確定如何將分散的代碼段和數據段整合到一起,以形成一個可執(zhí)行程序。對于逆向工程和二進制分析.map 文件可以提供有用的信息,因為它們描述了程序如何在內存中布局,這對于理解程序的執(zhí)行流程和結構非常有幫助。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編

反匯編文件簡介

??單片機中的反匯編文件是一種將機器語言代碼轉換為匯編語言代碼的工具??梢酝ㄟ^反匯編文件在調試過程中定位和解決問題。通過查看反匯編文件可以了解代碼的執(zhí)行過程,并確定可能出現問題的位置。可以使用反匯編文件幫助分析單片機的性能瓶頸。通過查看反匯編文件可以了解代碼的執(zhí)行時間和執(zhí)行效率,從而確定需要優(yōu)化的部分。通過查看反匯編文件,可以幫助對bin文件中的指令代碼進行識別。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編

怎么分析bin文件

??要想對二進制文件進行分析,就必須接住.map文件和反匯編文件,這兩個文件可以幫助我們快速分析和理解。
??通過結合.map文件可以幫助我們快速定位代碼和數據的地址,這樣可以在.bin文件中查找到對應的內容,但是.map文件沒有幫助我們理解遇到內存中是指令的數據類型,這時就需要反匯編文件幫助我們理解了。

分析bin文件

keil生成bin、map和反匯編文件

??在keil中一般只會自動生成一個.map文件,但是這個文件內容非常多,大部分對于我們分析.bin文件沒有幫助,所以需要對其生成的內容進行修改。而.bin文件和反匯編文件的生成需要使用一些命令來實現。

bin 和 反匯編文件

??在keil的 Opentions for Target ->> User ->> After Build/Rebuild 中輸入如下圖所示的內容即可生成 二進制 bin(.bin) 文件和 反匯編(.asm) 文件夾。

注意:完成編寫內容后一定要在 Run #x前面打上勾,并且編譯一次項目才會生成

單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編

??編寫完成并且編譯之后,可以在工程目錄下找到對應的bin 和 asm 文件。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編

map文件

??在keil的 Opentions for Target ->> Listing 中選中 Linker Listing,并且按照如下圖配置只選中:
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編

注意:完成以上內容后一定要重新編譯一次項目才會生成,并且生成文件在工程目錄下的 Listings 文件夾中

結合程序分析bin文件

??在.bin文件的開頭有如下內容:
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
??從上面對bin文件的簡介中提到單片機復位之后 PC 指針將指向 0x08000004 (這是復位中斷的地址),那么前面跳過的4個字節(jié)是什么東西呢,接著我們打開單片機的匯編代碼:
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
??其實在單片機中已經指定了以上中斷服務的入口地址,我們所編寫的中斷服務函數其實就是將中斷服務函數的入口地址存儲在這些已經確定的中斷服務地址中,所以前面忽略的4個字節(jié)的內容其實就是棧(SP指針)頂地址,具體可以查看啟動過程詳解。

注意:前四個字節(jié)是棧頂地址,不是函數的入口地址(不能讓PC指針指向這里),所以PC指針是在單片機復位以后自動指向 0x0800004

我這個單片機一共使用了101個中斷,所以前194字節(jié)都應該是中斷的內容,這是我們無法改變的,也就是下圖紅色框所畫出來的都是。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
??0x08000004 地址下面存放的數據內容是上圖中的 0x080001ad ,這是一個地址內容,這個是一個函數入口(PC指針指向了這里)。

從map和反匯編中分析bin文件

??上面是從程序中的分析,再結合.map文件進行分析時就會非常方便了,下圖就是我們.bin文件中的前194字節(jié)的服務地址。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
??接著看 0x08000004 地址下面存放的數據內容是上圖中的 0x080001ad ,在上圖中我們并沒有直接看到 0x080001ad 這個地址,這時我們需要對.bin文件和反匯編文件進行結合分析。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編
??其實從上圖可以看出 0x080001ad 這個地址里面的內容是一個16位的指令,所以在.map文件中就對應于地址 0x080001ac 。

??在進入服務中斷服務中,你會發(fā)現有一個在所有文檔中找不到的函數 __main 。
單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析),單片機,c語言,匯編

??這個函數可以參考文章STM32啟動詳細流程之__main,結合反匯編文件進行分析可以快速理解。

??對于.bin而言最具有分析價值的地方就在于開頭的地方。

總結

??對于使用IAP而言,在做程序跳轉時 PC 的指針應該指向應用程序相對地址的 0x00000004 ,0x00000000存儲的是棧頂指針,這一點非常重要。文章來源地址http://www.zghlxwxcb.cn/news/detail-777120.html

到了這里,關于單片機二進制bin(map、反匯編)文件分析(IAP程序跳轉,PC指針指向問題分析)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • [ARM匯編]計算機原理與數制基礎—1.1.2 二進制與十進制數制轉換

    [ARM匯編]計算機原理與數制基礎—1.1.2 二進制與十進制數制轉換

    在計算機中,我們通常使用二進制數制來表示數據,因為計算機的基本電平只有兩種狀態(tài):高電平(通常表示為 1)和低電平(通常表示為 0)。而在我們的日常生活中,我們習慣使用十進制數制。為了方便理解,我們需要掌握二進制與十進制之間的轉換方法。 二進制轉十進

    2024年02月08日
    瀏覽(22)
  • [ARM匯編]計算機原理與數制基礎—1.1.3 二進制補碼

    [ARM匯編]計算機原理與數制基礎—1.1.3 二進制補碼

    在計算機中,為了表示有符號整數(即正數和負數),通常采用二進制補碼表示法。二進制補碼不僅可以表示負數,還能簡化計算機的加法和減法運算。接下來,我們將介紹二進制補碼的概念及其計算方法。 原碼、反碼和補碼 在討論補碼之前,我們先了解一下原碼和反碼的

    2024年02月08日
    瀏覽(26)
  • 【Elasticsearch教程6】Mapping字段類型之二進制binary

    binary類型接收一個Base64編碼的字符串,默認情況二進制字段 不能被存儲和檢索 。 binary不能被存儲? 這個意思不是說沒有存儲在ES,而是說mapping中該字段的store參數默認是false。 默認情況下字段的值都會存儲到 _source 里, binary 類型的值也是如此。 如果 store 屬性設置為true,

    2024年02月05日
    瀏覽(35)
  • 二進制代碼反匯編逆向工具:IDA Pro(Win&Mac)v7.7 漢化版

    二進制代碼反匯編逆向工具:IDA Pro(Win&Mac)v7.7 漢化版

    IDA Pro是一款交互式的、可編程的、可擴展的、多處理器的、交叉Windows或Linux WinCE MacOS平臺主機來分析程序。它被公認為最好的花錢可以買到的逆向工程利器,已經成為事實上的分析敵意代碼的標準并讓其自身迅速成為攻擊研究領域的重要工具。 功能豐富:IDA Pro提供了諸多功

    2024年02月20日
    瀏覽(29)
  • CentOS配置Java環(huán)境報錯-bash: /usr/local/jdk1.8.0_381/bin/java: 無法執(zhí)行二進制文件

    CentOS配置Java環(huán)境報錯-bash: /usr/local/jdk1.8.0_381/bin/java: 無法執(zhí)行二進制文件

    CentOS配置Java環(huán)境后執(zhí)行java -version時報錯: 原因是所使用的jdk的版本和Linux內核架構匹配不上 使用以下命令查看Linux架構: 可以看到是x86_64架構。 而我使用的jdk是 arm64架構下的。 因此需要首先搞清楚是x86_64架構還是arm64架構還是其他的什么架構 在這里下載對應的JDK版本 更換

    2024年02月09日
    瀏覽(30)
  • 執(zhí)行docker- compose命令遇到-bash: /usr/local/bin/docker-compose: 無法執(zhí)行二進制文件 問題的一種解決方法

    執(zhí)行docker- compose命令遇到-bash: /usr/local/bin/docker-compose: 無法執(zhí)行二進制文件 問題的一種解決方法

    一、問題描述 當安裝好docker-compose并添加執(zhí)行權限后,執(zhí)行命令docker-compose 相關命令時出現 -bash: /usr/local/bin/docker-compose: 無法執(zhí)行二進制文件 二、解決思路 應該是安裝包有問題,網上找了幾種重新安裝方法途徑,還是會出現這個問題,最終找到一種可靠重新安裝的解決方法

    2024年02月08日
    瀏覽(54)
  • 匯編三、51單片機匯編指令1

    匯編三、51單片機匯編指令1

    (1)舉例:將立即數0x30送入累加器A ? ? ? ? ? ? ? MOV ? ??? A,? ? ? ? ? ??? #0x30 標號? ???? 操作碼? ? ? 目標地址,數據源? ? ? ? ? ? ? ? ? ;注解 (2)標號,注解可選項,不一定有。 (1)指令執(zhí)行時間為指令周期,一條指令需要1~4個機器周期。 (2)指令存儲空間:指令轉

    2024年02月03日
    瀏覽(26)
  • 匯編十四、51單片機匯編代碼規(guī)范

    (1)提高源程序的質量和可維護性,從而提高生產力。 (1)常量C;? (2)變量R;? (3)位變量B; (4)標號L; (5)子程序F;? (6)表T;? (7)中斷T; (8)函數F... 舉例:F_UartSendByte (1)ORG (2)END (3)EQU (4)BIT (5)DS (1)寄存器不能嵌套使用 (2)中斷服務程序切換寄存器區(qū)(RS0,RS1),這樣保護現場就不用保

    2024年02月07日
    瀏覽(23)
  • 單片機指令合集(匯編)

    單片機指令合集(匯編)

    (1)數據傳送類指令(7種助記符) ????????MOV(英文為Move):對內部數據寄存器RAM和特殊功能寄存器SFR的數據進行傳送; ????????MOVC(Move Code)讀取程序存儲器數據表格的數據傳送; ????????MOVX (Move External RAM) 對外部RAM的數據傳送; ????????XCH (Exchange) 字節(jié)

    2024年02月04日
    瀏覽(23)
  • 單片機匯編延時程序算法詳解

    在單片機編程中,延時程序是一項常見的任務。它用于控制程序在執(zhí)行期間暫停一段時間,以實現特定的時間延遲。延時程序在許多應用中都非常有用,例如控制LED的閃爍頻率、定時器的計時等。本文將詳細介紹單片機匯編語言中延時程序的算法,并提供相應的源代碼。 延時

    2024年02月04日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包