亚州天堂爱爱,做爱视频国产全过程在线观看,成人试看30分钟免费视频,女人无遮挡裸交性做爰视频网站

? ? ?

使用匯編語言編寫一個Android應用程序(hello,word)(android 匯編語言)

使用匯編語言編寫一個Android應用程序(hello,word)(android 匯編語言)

我們都熟悉計算機和PC內的程序和處理流程,那么手機的流程呢?一些app開發的人可能熟悉了,但是其他人可能對此知之甚少,本文中蟲蟲代理大家利用一個簡單的安卓實例來探索安卓中應用的處理流程。 出于研究目的我們沒有使用移動開發的常用的Android Studio和Java語言,而是使用了底層的匯編語言

Hello, Android!

問題源于,某個開發群,有人的隨口一個問題:智能手機如何工作的?里面有什么?

我們利用一個安卓設備Galaxy S6 Edge,該機基于ARM架構(大多數智能手機都是基于ARM CPU這和常見的基于X86 平臺 PC或者服務器不一樣)。我們就以他為例,實現一個匯編版本的\”Hello,World\”簡單程序,并讓它在該設備商跑起來。

使用匯編語言編寫一個Android應用程序(hello,word)(android 匯編語言)

.text

.globl _start

_start:

mov %r0, $1 // file descriptor number 1 (stdout)

ldr %r1, =message

mov %r2, $message_len

mov %r7, $4 // syscall 4 (write)

swi $0

mov %r0, $0 // exit status 0 (ok)

mov %r7, $1 // syscall 1 (exit)

swi $0

.data

message:

.ascii \”Hello, World Chongchongn\”

message_len = . – message

如果你之前從未見過匯編代碼,那么這個程序可不好理解,但不要擔心,跟著我們一起進行就好了。

程序解釋

程序分為兩部分: .text 部分:包含機器代碼指令。

.data部分:從第15行開始,包含變量,字符串和其他數據。.text部分通常是只讀的,而.data部分支持寫入。

在第2行中,我們定義了一個名為_start的全局函數。這是該工程的注入點。操作系統將從這一點開始運行代碼。該函數的實際定義在第4行。函數有兩個功能:第5-9行將消息打印到屏幕,第11-13行終止程序。實際上11-13行可以省略掉,這時候程序將字符串打印\”Hello,World ChongChong\”并退出,但退出時候可能會崩潰試圖執行一些隨機無效的指令,它恰好是內存中的下一個。

打印消息(r0,r1,r2寄存器和swi)

通過調用系統調用來打印到屏幕。系統調用是操作系統提供的功能。本程序中我們調用了write()系統調用,通過將值4賦值給名為r7(第8行)的CPU寄存器中來指示,然后執行\”swi $0\”指令(第9行),該指令直接調用在Android內部運行的Linux內核。

系統調用的參數通過其他寄存器傳遞:r0表示我們要打印的文件描述符的編號。我們給他賦值為1(第5行),這個我們都熟悉,標號為1的文件描述符實際上就是stdout,標準輸出,這樣就功能在屏幕上打印。

r1表示我們要載入的數據的內存地址,因此我們給它賦值為\”Hello,World ChongChong\”字符串的地址(第6行)。r2告訴Android我們要寫入多少字節。我們將其設置為message_len(第7行)的值,該值在第18行使用特殊的語法計算:點符號表示當前的內存地址,因此\”. – message\”表示當前內存地址減去message的地址。這就計算了message的長度。總之,第5-9行中的代碼相當于以下c代碼:

#define message \”Hello, World ChongChong n\”

write(1, message, sizeof(message));

結束程序(r0,r7)

結束程序要簡單得多,我們只需要將退出代碼賦值給r0(第11行),然后我們將值1(即exit()系統調用的值)賦值給r7(第12行),并且再次調用內核(第13行)。

如果有興趣,你可以參考在安卓源代碼中相關的Android系統調用列表及其編號。你也可以在那里找到write()和exit()函數的實現,它們調用相應的系統調用,就像我們一樣。

編譯源碼

為了編譯匯編程序,你需要Android NDK,即Native Development Kit,它包含一組用于ARM平臺的編譯器和構建工具。你可以直接從官方網站下載,也可以通過Android Studio安裝:

使用匯編語言編寫一個Android應用程序(hello,word)(android 匯編語言)

轉到\”SDK工具\”并選中\”NDK\”,然后單擊\”確定\”。另請注意Android SDK位置

獲得NDK后,你需要搜索一個名為arm-linux-androideabi-as的文件,它是ARM平臺的匯編程序。如果你是通過Android Studio下載的,請在Android SDK位置內查找。在我的機器上,它位于:

ndk-bundletoolchainsarm-linux-androideabi-4.9prebuiltwindows-x86_64bin

根據不同的NDK版本和操作系統該路徑會略有變化,根據實際環境選擇。該文件內置了ARM匯編程序。

將源代碼保存為hello.s的文件。然后運行以下命令將編譯為機器代碼:

arm-linux-androideabi-as -o hello.o hello.s

以上命令會創建一個名為hello.o的可執行文件。

然后再通過調用鏈接器將其轉換為可在你的設備上運行的ELF二進制文件:

arm-linux-androideabi-ld -o hello hello.o

你現在有一個名為hello的文件,其中包含你的程序,可以運行。

運行程序

安卓應用程序通常以APK格式分發。這是一種特殊的ZIP文件,安卓希望以特定的方式構建,并且應該包含Java類(你可以使用本機C/C 或者其他語言編寫具體的應用代碼,但入口點仍然必須是是Java) 。

為了方便運行我們的應用程序,我們使用adb將其復制到她的Android設備的臨時文件夾,然后使用adb shell運行應用程序并查看輸出:

adb push hello /data/local/tmp/hello

adb shell chmod x /data/local/tmp/hello

最后,運行應用程序:

adb shell /data/local/tmp/hello

Hello World Chongchon

總結

為安卓設備編寫匯編代碼是熟悉ARM體系結構的好方法,幫我們了解每天使用的APP是如何運行,及其底層的工作原理,我曾經在以前的文章和回答中回答過匯編作為一個必須要技能,我們不必須要精通但是每個人都需要學習一點,這樣有助于我們了解計算機體系結果和底層的運行原理。

版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

(0)
上一篇 2023年4月21日 上午10:18
下一篇 2023年4月21日 上午10:34

相關推薦

  • 湖南建科工程項目管理有限公司

    湖南建科工程項目管理有限公司: 追求卓越,共贏未來 湖南建科工程項目管理有限公司作為一家專注于土木工程領域的專業機構,自成立之初便秉承著“追求卓越,共贏未來”的理念,致力于為客戶提…

    科研百科 2025年7月28日
    0
  • 美國大學學歷人口總數

    美國是世界上人口最多的國家之一,同時也是一個擁有龐大大學學歷人口的國家。根據2020年的數據,美國大學學歷人口總數超過了3700萬,占據了總人口的22.6%。這個數字看起來非常龐大…

    科研百科 2024年11月15日
    8
  • 訂單管理系統項目背景

    訂單管理系統項目背景 隨著互聯網技術的快速發展,企業訂單管理的需求也在不斷增加。傳統的訂單管理方式已經無法滿足現代企業的需要,因此,訂單管理系統成為了企業提高訂單管理效率、降低訂單…

    科研百科 2024年12月18日
    1
  • 醫生主持科研項目是什么

    醫生主持科研項目是一種非常重要的工作,因為它涉及到對疾病和健康問題的研究,并為病人提供診斷和治療方案。醫生作為科研項目的主持人,需要承擔一定的責任和壓力,因為科研項目的結果直接關系…

    科研百科 2025年5月4日
    0
  • 工程項目管理策劃書

    工程項目管理策劃書 工程項目管理是一個復雜的過程,需要經過認真的規劃和實施,以確保項目的成功完成。本策劃書將介紹如何規劃和實施工程項目管理,以確保項目的成功完成。 一、項目概述 本…

    科研百科 2024年9月22日
    14
  • c# arm linux UI

    C#和ARM Linux UI的概述 隨著嵌入式系統的發展,C#和ARM Linux UI成為了越來越重要的技術。C#是一種面向對象的編程語言,可以用于開發Windows桌面應用程…

    科研百科 2024年11月28日
    0
  • 黨支部雙基

    黨支部雙基黨支部雙基 1.楊姜,我是一介肺結核病。昨天,“非典型”、“新型肺炎”等特殊特殊情況,你怎么能患上我的肺結核?我們解讀了“抑郁癥”,今天的文章已經講到“新型肺炎”,現在停…

    科研百科 2024年11月20日
    1
  • 190頁PPT讀懂工業軟件巨頭達索Dassault(達索的工業軟件)

    導 讀 ( 文/ 華泰計算機首席分析師 謝春生及團隊;公眾號跨越鴻溝,本文經授權轉載 ) 達索系統(Dassault Systemes)脫胎于達索航空(Dassault Aviat…

    科研百科 2024年5月6日
    46
  • 鄭州地鐵集團科研項目

    鄭州地鐵集團科研項目 隨著城市化進程的不斷加速,地鐵交通已經成為城市交通運輸的重要組成部分。作為地鐵交通的組織者,鄭州地鐵集團一直致力于推動地鐵交通的發展,提高城市交通效率。其中,…

    科研百科 2025年6月5日
    1
  • 信息化科研項目經費

    信息化科研項目經費:創新科技,提升國力 隨著科技的不斷進步,信息化科研項目經費已經成為科研項目中不可或缺的一部分。信息化科研項目經費的支出,不僅可以支持科研項目的開展,還可以提升國…

    科研百科 2025年5月2日
    1