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 庫函式 - strstr()函式
- Openmp Runtime 庫函式彙總(上)函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- C++之memset函式C++函式
- Go plan9 彙編:說透函式棧Go函式
- 前端之jquery函式庫前端jQuery函式
- 植物大戰殭屍,用QT注入程式碼,AT&T彙編語法QT
- C++ 逆向之 move 函式C++函式
- C++之函式過載C++函式
- C語言轉寫成MIPS指令集彙編以及MIPS指令集彙編中函式呼叫時棧的變化C語言函式
- 一段C語言和彙編的對應分析,揭示函式呼叫的本質C語言函式
- C語言庫函式及示例C語言函式
- 【彙總】scapy 函式函式
- Oracle函式彙總Oracle函式
- string 函式彙總函式
- 常用函式彙總函式
- Mysql 常用函式(1)- 常用函式彙總MySql函式
- C++ 的函式分檔案編寫C++函式
- Django筆記二十七之資料庫函式之文字函式Django筆記資料庫函式
- PHP之string之ord()函式使用PHP函式
- C++ functional庫中的仿函式C++Function函式
- C++11 標準庫 bind 函式C++函式
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- C與彙編(NASM) (1)ASM
- Oracle 分組彙總統計函式的使用Oracle函式
- 開窗函式彙總函式
- AA常用函式彙總函式
- PHP 常用函式彙總PHP函式
- PHP字串函式彙總PHP字串函式
- MySQL常用函式彙總MySql函式
- js 使用 DotNetObjectReference 呼叫 c# 函式JSObjectC#函式
- C語言qsort函式的使用C語言函式
- C++多型之虛擬函式C++多型函式
- STM32呼叫C庫自帶函式函式