LiteOS Studio零成本學習ARM彙編 二 初識謝娘

2020-09-27 openHarmony

免責聲明:本文提供的所有內容僅供學習、分享與交流,不保證內容的正確性,亦不對內容可能帶來的風險擔責。如若轉載,請署名以及註明原始出處。本文僅代表個人的立場和觀點,並不代表任何公司或組織。

本系列的其他文章


基於LiteOS Studio & Qemu零成本學習ARM 彙編——0x02 初識謝娘

下面的全部操作僅適用Window 10 64bits 環境。

0x01 簡介

GNU toolchain 工具鏈是是ARM嵌入式開發必備工具,安裝LiteOS Studio時,需按照教程完成安裝工具鏈。安裝完成效果如下圖,所在目錄為:%userprofile%\.huawei-liteos-studio\tools\arm-none-eabi。為了在Windows下編譯構建makefile,還需安裝GNU Make工具,參考LiteOS Studio文檔站點即可。


GNU Arm Embedded Toolchain

0x02 簡介

來看一段簡單的彙編代碼,然後在Qemu connex開發板上進行仿真運行。彙編源文件包含一行行的聲明序列,遵循如下的格式:

label: instruction @ comment

每個部分均為可選:

label:

標籤,用於引用指令在內存中的位置,內存地址出現的地方都就可以使用label標籤。標籤名稱由字母、數字、_和$ 組成。

Comment:

注釋,由@符號開始,任何在@之後的字符串都被忽略。

instruction:

指令,可以是彙編指令ARM instruction或彙編器指令assembler directive,後者是彙編器的命令,點符號.開始的指令。 下面看一段簡單的彙編代碼。

.text .global _start_start: @ 標籤 mov r0, 4 @ 寄存器r1賦值4 add r2, r1, r0 @ 把r0和r1兩個寄存器的值相加,保存在寄存器r2stop: b stop @ 無限循環停止執行

其中.text是彙編器指令,表示後續的指令會被彙編到代碼段 code section,而不是數據段.data section。後續會詳細介紹段section。

0x03 獲取代碼和Makefile構建腳本

代碼和Makefile構建腳本,LiteOS Stuido工程配置文件等已經上傳到gitee代碼倉,可以下載下載,直接編譯、調試。

https://gitee.com/huawei_liteos_studio/arm_assembly/tree/master/HelloArm

0x04 ARM 彙編調試演示

點擊工具欄上的編譯圖標,可以實現一鍵編譯:

編譯 編譯日誌 輸出件

點擊工具欄調測按鈕,開始調試:

點擊工具欄調測按鈕

點擊調測工具欄的單步跳過按鈕,或者F10快捷鍵,開始單步調試,可以看到寄存器r0,r1先後被賦值為5和4.繼續單步執行,r2寄存器賦值為9。我們這個最簡單的彙編程序在Qemu上執行完畢。

單步調測F10

重新開始調測,這一次,我們打開build目錄下面的asm文件,並且分欄展示,F10單步調試,效果圖如下:


ASM反彙編展示

可以看到,add.s 執行到第6行add r2, r1, r0 時,寄存器pc值為0x8 <_start+8>,此時asm反彙編文件在第10,此時的地址為8,彙編語句為add r2, r1, r0,彙編源碼、PC寄存器、ASM反彙編文件可以彼此對應上。

0x05 ARM 編譯命令說明

arm-none-eabi-as -o add.o add.s -o 選項指定輸出文件名稱arm-none-eabi-ld -Ttext=0x0 -o add.elf add.o -o 選項指定輸出文件名稱,-Ttext=0x0 指定分給給text段的地址,從0x0開始。arm-none-eabi-nm add.elf nm命令查看各個標籤分配的地址arm-none-eabi-objcopy -O binary add.elf add.bin 轉換elf文件為bin文件格式

0x06 參考資料

http://www.bravegnu.org/gnu-eprog/hello-arm.html

https://jacobmossberg.se/posts/2017/01/17/use-gdb-on-arm-assembly-program.html

相關焦點

  • LiteOS Studio零成本學習ARM彙編 三 再上層樓
    免責聲明:本文提供的所有內容僅供學習、分享與交流,不保證內容的正確性,亦不對內容可能帶來的風險擔責。如若轉載,請署名以及註明原始出處。本文僅代表個人的立場和觀點,並不代表任何公司或組織。本系列的其他文章 基於LiteOS Studio & Qemu零成本學習ARM 彙編
  • LiteOS Studio零成本學習ARM彙編 五 移花接木
    免責聲明:本文提供的所有內容僅供學習、分享與交流,不保證內容的正確性,亦不對內容可能帶來的風險擔責。如若轉載,請署名以及註明原始出處。本文僅代表個人的立場和觀點,並不代表任何公司或組織。基於LiteOS Studio & Qemu零成本學習ARM 彙編——0x05 移花接木下面的全部操作僅適用Window 10 64bits 環境。
  • LiteOS Studio零成本學習ARM彙編 一 環境搭建
    免責聲明:本文提供的所有內容僅供學習、分享與交流,不保證內容的正確性,亦不對內容可能帶來的風險擔責。如若轉載,請署名以及註明原始出處。本文僅代表個人的立場和觀點,並不代表任何公司或組織。基於LiteOS Studio & Qemu零成本學習ARM 彙編——0x01 環境搭建下面的全部操作僅適用Window 10 64bits 環境。
  • 華為 HUAWEI LiteOS Studio安裝
    安裝arm-none-eabi軟體Embedded Toolchain自動下載程序來進行下載,默認下載到C:\Users\<UserName>\.huawei-liteos-studio\tools\arm-none-eabi目錄。
  • HUAWEI LiteOS Studio簡介
    更多信息可以訪問:https://liteos.gitee.io/liteos_studio/#/https://liteos.gitee.io/liteos_studio/#/
  • 基於Android的ARM彙編語言系列之二:C/C++程序生成ARM彙編程序
    章節列表之一:ARM彙編語言開篇之二:C/C++程序生成ARM彙編程序的過程分析之三:ARM彙編語言程序結構之四:ARM處理器的尋址方式之五:ARM指令集與Thumb指令集之六:NEON指令集與VFP指令集本文引用地址:http://www.eepw.com.cn
  • iOS ARM彙編
    其實都是GNU的彙編,只是架構不一樣,彙編是嚴重依賴機器的,機器架構不一樣,所以對應的彙編指令也就不一樣。所以,就不用去了解模擬器上的彙編,作用並不大。3、如何學好arm64彙編除了有arm64,還有arm32彙編,不過以後手機都是arm64構架,所以沒必要學arm32彙編。
  • 基於Android的ARM彙編語言系列之三:ARM彙編語言程序結構
    章節列表之一:ARM彙編語言開篇之二:C/C++程序生成ARM彙編程序的過程分析之三:ARM彙編語言程序結構之四:ARM處理器的尋址方式之五:ARM指令集與Thumb指令集之六:NEON指令集與VFP指令集本文引用地址:http://www.eepw.com.cn
  • 華為 HUAWEI LiteOS Studio界面介紹
    編譯器類型下拉菜單目前支持arm-none-eabiarm-none-eabi可參考安裝arm-none-eabi軟體,通過本站安裝程序下載Makefile腳本與arm-none-eabi方式二:在Makefile或
  • 華為HUAWEI LiteOS Studio界面介紹
    編譯器類型下拉菜單目前支持arm-none-eabiarm-none-eabi可參考安裝arm-none-eabi軟體,通過本站安裝程序下載Makefile腳本與arm-none-eabi方式二:在Makefile或
  • 嵌入式arm開發學習第三天
    arm開發學習第三天交叉編譯裸板程序:1.arm-cortex_a9-linux-gnueabi-gcc -nostdlib -c -o xxx.o xxx.c-c: 只編譯不連結-nostdlib: 不允許使用標準c庫內容2.arm-cortex_a9-linux-gnueabi-ld -nostartfiles
  • 有關arm彙編中的align
    經常會看到arm-linux彙編中有如下的指令:.arm-linu是按照2^n的方案對齊的,需要說明的是這個對齊和ld-script裡的對齊不同,不是一會事。For other systems, including the i386 using a.out format, and the arm and strongarm,it is the number of low-order zero bits the location counter must have after advancement.
  • ARM裸機開發bootloader彙編語言
    一、彙編語言概述1、為什麼要使用彙編本文引用地址:http://www.eepw.com.cn/article/201611/318213.htm一般情況下我們不會用到彙編,但有兩種情況下,我們要用到彙編。1、啟動代碼。
  • ARM彙編語言(4) 指令、偽操作、偽指令學習
    GLOBAL:IMPORT:EXTERN:GET:INCLUDE:INCBIN:KEEP:NOFP:REQUIRE:REQUIRE8:PRESERVE8:RN:ROUT:偽指令部分:偽指令不是真正的指令,在彙編編譯器對源程序進行彙編處理時被替換成對應的
  • ARM 彙編的mov操作立即數的疑問
    因為對arm彙編有些指令還不能理解,特別是一些相似功能指令間的區別。偶然在網上搜到「faq ARM assembly」,其中描述的幾個問題還是值得好好研究一下。2. 慢慢的發現自己也不再害怕英文的文檔了,耐心看至少也能懂個大概。
  • arm彙編中的跳轉指令
    .textldrsp,=STACK_BASEldrsl,=STACK_BASE-STACK_SIZEldrpc,=entry這是一個合法的彙編文件,它把堆棧基址設為如下,給出了代碼一的反彙編代碼:讓我們在Linux環境下執行下面的命令: arm-elf-as -o demo.o demo.s arm-elf-objdump -D demo.o結果: demo.o:fileformatelf32-littlearmDisassemblyofsection.text
  • ARM彙編 MOV PC,LR
    另外注意pc,在調試的時候顯示的是當前指令地址,而用mov lr,pc的時候lr保存的是此指令向後數兩條指令的地址,大家可以試一下用mov pc,pc,結果得到的是跳轉兩條指令,這個原因是由於arm的流水線造成的,預取兩條指令的結果.
  • 初識Golang彙編
    為什麼需要彙編眾所周知,在計算機的世界裡,只有2種類型。那就是:0和1。計算機工作是由一系列的機器指令進行驅動的,這些指令又是一組二進位數字,其對應計算機的高低電平。而這些機器指令的集合就是機器語言,這些機器語言在最底層是與硬體一一對應的。
  • 27款反彙編/調試器/靜態和動態分析工具
    https://github.com/angr/angr  BARF:多平臺,開源二進位分析和逆向工程框架。  https://github.com/programa-stic/barf-project  binnavi:用於基於圖形可視化的逆向工程的二進位分析IDE。
  • 初識HarmonyOS-電子發燒友網
    打開APP 初識HarmonyOS HarmonyOS社區 發表於 2021-01-13 09:56:51 在之前的公眾號文章裡