日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

嵌入式系统裸机程序开发与调试

發布時間:2024/3/12 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式系统裸机程序开发与调试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 🌹1.GUN工具的使用
      • 🚀1.1符號顯示器nm
      • 💒1.2objdump:信息查看器
      • 🎪1.3objcopy:段剪輯器
    • ??2.程序編譯過程
      • ?2.1程序鏈接過程
      • 2.2指定頭文件
      • 🎪2.3 指定庫文件
    • ?3.裸機開發流程

🌹1.GUN工具的使用

GUN是一個開源的組織,給我們帶來了很多開源軟件和編譯工具,如我們常用的

  • C編譯器 :gcc
  • 預處理器 :cpp
  • C++編譯器 g++
  • 匯編器 :as
  • 鏈接器 :ld
  • 二進制工具集 :objcopy
    二進制工具集的含義:他們專門用于控制和將二進制目標代碼從一種格式轉換為另一種格式,這些工具被稱作為objcopy和objdump,許多linux機器使用的底層軟件在編譯階段都非常依賴這些工具。調試的時候也需要他們。objcopy用于從一個文件拷貝目標代碼到另一個文件,并在這個過程中進行轉換。這樣外面可以在不同的目標代碼格式之間進行自動的轉換并操縱這個過程中的內容。他們可以任何方式來操作二進制文件。

🚀1.1符號顯示器nm

可通過arm-linux-gcc -v 查看是否有arm-linux-gcc這個編譯器

顯示符號 $nm -n main_elf
顯示內容:
?第一列為符號地址
?第二列為符號所在段
?第三列為符號名稱
比如我執行arm-linux -nm -n demo,demo是我的一個可執行程序,會出現如下信息

這些符號的含義如下圖所示:

這個符號顯示器很有用,可以看到絕大部分的信息,但是局部變量是看不到的,因為他分配在棧里面

💒1.2objdump:信息查看器

objdump 有點像那個快速查看之類的工具,就是以一種可閱讀的格式讓你更多地了解二進制文件可能帶有的附加信息。對于一般只想讓自己程序跑起來的程序員,這個命令沒有更多意義,對于想進一步了解系統的程序員,應該掌握這種工具,至少你可以自己寫寫shellcode了,或者看看人家給的 exploit 中的 shellcode 是什么東西。

? 查看所有段信息 $objdump -h main_elf
? 查看文件頭信息 $objdump -f main_elf
? 查看反匯編 $objdump -d main_elf
? 查看內嵌反匯編 $objdump -S -d main_elf
我一一演示一遍這些命令的使用


🎪1.3objcopy:段剪輯器

objcopy被用來復制一個目標文件的內容到另一個文件中,可以使用不同于源文件的格式來輸出目的文件,即可以進行格式轉換

去除elf格式信息
$objcopy -O binary -S main_elf main.bin

??2.程序編譯過程

程序編譯4步驟:

(1)預處理
C/C++源文件中,以“#”開頭的命令被稱為預處理命令,如包含命令“#include”、宏定義命令“#define”、條件編譯命令“#if”、“#ifdef”等。預處理就是將要包含(include)的文件插入原文件中、將宏定義展開、根據條件編譯命令選擇要使用的代碼,最后將這些東西輸出到一個“.i”文件中等待進一步處理。
(2)編譯
編譯就是把C/C++代碼(比如上述的“.i”文件)“翻譯”成匯編代碼。
(3)匯編
匯編就是將第二步輸出的匯編代碼翻譯成符合一定格式的機器代碼,在Linux系統上一般表現為ELF目標文件(OBJ文件)。“反匯編”是指將機器代碼轉換為匯編代碼,這在調試程序時常常用到。
(4)鏈接
鏈接就是將上步生成的OBJ文件和系統庫的OBJ文件、庫文件鏈接起來,最終生成了可以在特定平臺運行的可執行文件。

  • 一個標準應用程序通常都由鏈接器采用默認鏈接腳本(arm-linux-ld --verbose)將“用戶程序” 和“庫” 共同鏈接生成可執行程序

?2.1程序鏈接過程

鏈接過程中需要一個標號(_start)作為程序入口
標號(_start)的作用是: 將用戶程序從匯編帶到了C語言程序入口, 即main()函數, 從此開始我們的應用程序之旅

2.2指定頭文件

頭文件在哪里?

  • 系統目錄

    • 系統目錄在哪?工具鏈里的某個include目錄

    • 怎么確定?

      echo 'main(){}'| gcc -E -v - // 它會列出頭文件目錄、庫目錄(LIBRARY_PATH)
    • 可以不使用系統include目錄嗎?可以,編譯時指定參數-nostdinc

  • 可以自己指定頭文件目錄

-I <頭文件目錄>

🎪2.3 指定庫文件

庫文件在哪里?

  • 系統目錄

    • 系統目錄在哪?工具鏈里的某個lib目錄

    • 怎么確定?

      echo 'main(){}'| gcc -E -v - // 它會列出頭文件目錄、庫目錄(LIBRARY_PATH)
    • 可以不使用系統lib目錄嗎?可以,編譯時指定參數-nostdlib

  • 可以自己指定庫文件目錄

-L <庫文件目錄>
  • 指定庫文件
-l <abc> // 鏈接 libabc.so 或 lib.a

?3.裸機開發流程

*假設你寫了一個程序名字為uart_test.c

  • 使用命令編譯:arm-linux-gcc uart_test.c -c -o uart.o

  • 鏈接并強行指定main入口為0x48000000:arm-none-linux-gnueabi-ld uart.o -o uart-test -e main -Ttext=0x48000000

  • 把elf文件變為bin結尾的二進制文件arm-none-linux-gnueabi-objcopy -O binary -S uart

  • 把生成的.bin結尾的文件放到windows

  • linux板子終端進入uboot修改環境變量執行setenv loadaddr 0x48000000修改并通過saveenv進行保存,注意環境變量的地址為你強行指定main函數的地址

  • 在uboot敲loadb命令等待文件傳輸

  • 打開超級終端serucecrt把.bin文件傳輸到板子里

  • 通過go 0x48000000 執行main函數,這時一個完整的程序就可以執行了,可以在里面執行最簡單的點燈操作,如下圖所示

  • 總結

    以上是生活随笔為你收集整理的嵌入式系统裸机程序开发与调试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品一区二区网站 | 亚洲区欧美区 | 日韩一区二区三区精品 | 黑人一级视频 | 国产欧美网站 | 精品欧美国产 | 捆绑凌虐一区二区三区 | 综合久久国产 | 亚洲 欧美 中文字幕 | 国产精品久久久久影院老司 | 黑人玩弄人妻一区二区三区四 | av在线伊人| 狠狠爱综合 | 葵司在线视频 | 亚洲每日更新 | 国产一级视频在线 | 波多野结衣视频免费 | 欧美第一网站 | 免费无遮挡在线观看视频网站 | 少妇av一区二区三区 | 欧美寡妇性猛交 | 成人视屏在线 | 欧美 另类 交| 在线免费福利视频 | 日本亚洲在线 | 福利片在线看 | 欧美一级免费片 | 成人性毛片 | 日韩精品在线观看一区二区三区 | 福利电影一区二区 | 国产一级性生活片 | 蜜桃视频在线观看一区 | 国产精品夫妻自拍 | 亚洲欧美小视频 | 秋霞伦理一区二区 | 67194成人在线 | 黄色一毛片 | 中文字幕91在线 | 国产精品久久久久久一区二区三区 | 国内精品99 | 久久久久久久999 | 一区二区视频网站 | 精品伊人久久 | 4438激情网| 韩国日本在线观看 | 在线观看日本 | 少妇高潮久久久 | 亚洲AV无码精品久久一区二区 | 亚洲一区二区三区在线视频 | 农村少妇久久久久久久 | 日本丰满少妇裸体自慰 | 后宫秀女调教(高h,np) | 亚洲天堂国产精品 | 蜜臀视频一区二区三区 | 久久久成人网 | 亚洲天堂aaa | 爱吃波客今天最新视频 | 青青青青青操 | 亚洲精品乱码久久久久久不卡 | 伊人影院网 | 香蕉av777xxx色综合一区 | 亚洲黄色在线看 | 美女调教视频 | 国产日韩欧美在线播放 | 亚洲经典一区二区三区 | 91精品国产乱码久久 | 成人高潮视频 | 黄色免费网站在线看 | 超碰97国产在线 | 中文在线观看免费网站 | 欧美黄色aaa| 嫩草嫩草嫩草嫩草嫩草 | 高h喷汁呻吟3p | 在线精品亚洲欧美日韩国产 | 激情网av | 天天av天天干 | 中文字幕不卡在线播放 | 99热最新 | 91在线免费看片 | 欧美精品导航 | 99免费 | 亚洲乱淫 | 激情av综合 | 在线视频激情小说 | 99riav视频 | 青娱网电信一区电信二区电信三区 | 影音先锋中文字幕资源 | 中国美女一级片 | 欧美一区二区三区免费 | 亚洲精品中文无码AV在线播放 | 亚洲欧美一区二区三区久久 | www.午夜视频 | 国产18精品乱码免费看 | 黄色av一级片 | 天天天干干干 | 噼里啪啦免费看 | 成人免费久久 | 成人免费视频国产在线观看 | 欧美欧美欧美欧美 |