AT&T彙編之使用C庫函式
本文以獲取CPUID的程式為例,來演示如何使用AT&T彙編呼叫C庫函式。
首先看一下純彙編程式碼示例:
.section .data
message:•
.asciz "CPUID:xxxxxxxxxxxx\n"
len = . - message
.section .text
.global _start
_start:
movl $0, %eax
cpuid
lea message(%rip), %esi•
movl %ebx, 6(%esi)
movl %edx, 10(%esi)
movl %ecx, 14(%esi)
mov $1, %rax
mov $1, %rdi
lea message(%rip), %rsi
mov $len, %rdx
syscall
mov $60, %rax
xor %rdx, %rdx
syscall
程式碼輸出:
wilcohuang@wilcohuang-PC1:/mnt/e/code/test-asm/2$ ./cpuid
CPUID:GenuineIntel
像這面這樣,我們輸入輸出總是使用syscall,對於開發效率來說並不是很友好,然後我們可以來看一下使用C庫的效果:
.section .data
message:
.asciz "CPUID:%s\n"
.section .bss
.lcomm buffer 12
.section .text
.global _start
_start:
xor %eax, %eax
cpuid
lea buffer(%rip), %edi
mov %ebx, (%edi)
mov %edx, 4(%edi)
mov %ecx, 8(%edi)
lea message(%rip), %rdi
lea buffer(%rip), %rsi
call printf
mov $0, %rdi
call exit
彙編和連線命令:
as -gstabs+ -o cpuid.o cpuid.asm && ld -lc -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cpuid cpuid.o
-lc表示連結C庫。-dynamic-linker指定連結器。如果僅指定-lc,未指定聯結器,程式執行時無法連線到C庫,會報錯。
輸出如下:
CPUID:GenuineIntel
是不是很方便呢?
相關文章
- AT&T彙編之32位與64位系統呼叫
- C++ 反彙編:關於函式呼叫約定C++函式
- 從彙編層面深度剖析 C++ 虛擬函式C++函式
- iOS逆向之旅(基礎篇) — 彙編(四) — 彙編下的函式iOS函式
- C++程式中不同函式呼叫方式的彙編碼比較C++函式
- c語言快速排序(庫函式使用)C語言排序函式
- 使用DbgHelp獲取函式呼叫堆疊之inline assembly(內聯彙編)法函式inline
- fgetpos() - C庫函式函式
- C 庫函式 - strstr()函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- c函式編寫規範函式
- C語言的本質(32)——C語言與彙編之C語言內聯彙編C語言
- C語言函式手冊:c語言庫函式大全|C語言標準函式庫|c語言常用函式查詢C語言函式
- Openmp Runtime 庫函式彙總(上)函式
- C庫函式手冊函式
- 建構函式與new的彙編實現函式
- Go plan9 彙編:說透函式棧Go函式
- C++之memset函式C++函式
- C標準庫之檔案目錄操作函式——_tempnam函式
- 前端之jquery函式庫前端jQuery函式
- tmpnam() - C語言庫函式C語言函式
- tmpfile() - C語言庫函式C語言函式
- c語言函式庫(轉)C語言函式
- X86 定址方式、AT&T 組合語言相關知識、AT&T 與 Intel 組合語言的比較、gcc 嵌入式彙編組合語言IntelGC
- 植物大戰殭屍,用QT注入程式碼,AT&T彙編語法QT
- C++之函式過載C++函式
- c#之回撥函式C#函式
- C++ 逆向之 move 函式C++函式
- 一段C語言和彙編的對應分析,揭示函式呼叫的本質C語言函式
- 常用函式彙總函式
- Oracle函式彙總Oracle函式
- 【彙總】scapy 函式函式
- 報告彙總資料使用組函式函式
- VS2017如何使用C_C++語言呼叫匯編函式C++函式
- 檔案檢測函式 feof, ferror,clearerr C庫函式函式Error
- Mysql 常用函式(1)- 常用函式彙總MySql函式
- C語言庫函式及示例C語言函式
- linux下的c庫函式Linux函式