原创 第4部分- Linux ARM彙編首個程序

第4部分- Linux ARM彙編首個程序 首個64位彙編 我們先創建第一個AArch64上的首個彙編程序,這個64位代碼是我在一個ARMv8服務器上運行的。有國產的華爲鯤鵬/飛騰,非國產的也可以是安培或者Cavium。 first64.

原创 第10部分- Linux ARM彙編 尋址方式

第10部分- Linux ARM彙編 尋址方式 都遵循gas彙編器的語法。 立即尋址指令後面的地址碼部分爲立即數             MOV RO, #1234 寄存器尋址中,操作數在寄存器中,指令執行時直接從寄存器中取值進行操作。

原创 第79部分- Linux x86 64位彙編 優化技巧

第79部分- Linux x86 64位彙編 優化技巧 優化彙編主要是5中常用的方法: 優化運算/優化變量/優化循環/優化條件分支/優化通用子表達式。 減少運算過程中的局部變量的大量使用。 處理變量有3種方式:使用.data或者.bss段

原创 第12部分- Linux ARM彙編 控制指令/冰雹猜想

第12部分- Linux ARM彙編 控制指令/冰雹猜想 ARM的彙編控制如下: IF、ELSE及ENDIF WHILE及WEND MACRO及WEND MEXIT   32位示例 完成1+2+…+22。 .text .global m

原创 第9部分- Linux ARM彙編 語法

第9部分- Linux ARM彙編 語法 AArch64上基本所有指令都有3個操作符。一個目標寄存器和2個源寄存器。 例如: add w5, w3, w4       // w5 ← w3 + w4 或者: add x5, x3, x

原创 第14部分- Linux ARM彙編數組/結構體/索引

第14部分- Linux ARM彙編數組/結構體/索引   我們先來看下,如果在C代碼中兩個定義如下,一個數組和一個結構體。 int a[100]; struct my_struct {   char f0;   int f1; } b

原创 第16部分- Linux ARM彙編 ARM64調用標準

第16部分- Linux ARM彙編 ARM64調用標準 本章主要是是一些描述性的內容,我們先來看下4個術語。 AArch32 – the legacy 32-bit instruction set architecture (ISA)

原创 第5部分- Linux ARM彙編 ARM 架構細節

第5部分- Linux ARM彙編 ARM 架構細節 ARM處理器有37個寄存器,包括31個通用寄存器,和6個狀態寄存器。 通用寄存器是31個從x0-x30,31個數量是比較奇怪的,其實還有一個是Zero Register是wzr。如果是

原创 第75部分- Linux x86 64位彙編 kdbg

第75部分- Linux x86 64位彙編 kdbg 在ubnut環境中通過apt install kdbg進行安裝。 即可使用。 kdbg是一個帶有圖形化界面的調試器,可以在程序的任何地方暫停並觀察變量值。 可以直接選擇二進制文件進行

原创 第81部分- Linux x86 64位彙編 內存映射文件

第81部分- Linux x86 64位彙編 內存映射文件 上個例子中,如果執行如下: #readchange readchange.s readchange.s 則會發現readchange.s會空了。 因爲系統不能在讀取一個文件的同時

原创 第73部分- Linux x86 64位彙編 反彙編objdump

第73部分- Linux x86 64位彙編 反彙編objdump 通過objdump可以進行反彙編操作。 通過objdump -d xxx可以查看二進制目標程序。 準備一個經典代碼如下,我們進行編譯,gcc -S disass.c  -

原创 第78部分- Linux x86 64位彙編 創建優化的代碼

第78部分- Linux x86 64位彙編 創建優化的代碼 我們可以用gcc編譯器從C程序創建編譯器優化後的彙編代碼,然後分析優化。 以tempconv.c文件爲例,將華氏溫度轉爲攝氏溫度。 #include <stdio.h> f

原创 第77部分- Linux x86 64位彙編 優化編譯器代碼

第77部分- Linux x86 64位彙編 優化編譯器代碼-O1/-O2/-O3 僅僅使用匯編語言代碼替換C或者C++不會必然使得程序執行的更好,因爲編譯器已經把所有高級語言代碼都轉化成了彙編語言。 這裏的關鍵是編寫比編譯器生成的代碼更

原创 第76部分- Linux x86 64位彙編 CPUID

第76部分- Linux x86 64位彙編 CPUID CPUID指令是一條彙編語言指令。 處理器把廠商字符串返回到ebx,edx和ecx寄存器中。 示例 如下: #cpuid.s Sample program to extract

原创 第74部分- Linux x86 64位彙編hexdump

第74部分- Linux x86 64位彙編hexdump 通過hexdump -C xx 可以看到二進制文件具體16進制和字符串顯示情況。 例如下: 00000070  b8 01 00 00 00 cd 80 55  89 e5 83