AT&T汇编之使用C库函数

Linux 64位系统下的AT&T汇编调用C语言printf函数 市面上大多数的汇编代码都是32位的。很少有Linux 64位 AT&amp;T的。<汇编语言程序设计>这里面的例子大部分也是32的。想要64位的例子需要自己研究,调试。 书本上的例子如下: .section.data output: .string"TheProcessorVendorIDis'%s'\n" .section.bss .lcommbuffer,12 .section.text .global_start _st... 阅读详情

本文以获取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

是不是很方便呢?

操作系统真象还原第六章 6.1 函数调用约定简介 C 语言遵循的调用约定是 cdecl: 调用者将所有参数从右到左入栈 调用者清理参数所占的栈空间 6.2 汇编语言和 C 语言混合编程 6.2.1 浅析 C 库函数与系统调用 汇编语言和 C 语言混合编程可分为两大类: 单独的汇编代码文件与单独的 C 语言文件分别编译成目标文件后,一起链接成可执行程序 在 C 语言中嵌入汇编代码,直接编译生成可执行程序 系统调用是 Linux 内核提供的一套子程序。 系统调用的入口只有一个,即 0x80 号中断,子功能号在寄存器 eax 阅读详情

相关推荐

部分C库函数重写以及反汇编分析之memcpy()

为了打牢基本功,重写部分C库函数(参考C库与别人的代码,并给出了测试代码),并对部分进行反汇编分析(用VC自带反汇编和OD)。在写程序过程中,会仔细验证很多以前模棱两可的知识点。 1. /*从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 1.source和destin所指内存区域不能重叠,函数返回指向destin的指针。    2.与st

乘风的专栏 3342

汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件

基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡栈 对象调用约定 : 由函数内部平衡栈, 寄存器用于保存对象的首地址(就是this指针) 快速调用...

weixin_30858241的博客 600

AT&T汇编逆向分析实战:从程序崩溃到漏洞挖掘

逆向工程是软件安全领域的核心技术,它通过分析二进制程序来理解其内部逻辑与潜在风险。其原理在于将可执行文件视为“黑盒”,运用静态与动态分析方法,还原程序结构与行为。这项技术的核心价值在于能够定位软件缺陷、分析恶意代码以及挖掘安全漏洞,广泛应用于软件调试、安全评估和CTF竞赛等场景。掌握AT&T汇编语法是进行Linux平台逆向分析的关键,因为它是GDB、objdump等GNU工具链的默认反汇编格式。通过分析典型的程序崩溃案例,如访问违例(0xc0000005)和缓冲区溢出,可以深入理解内存错误与安全漏洞的关联。

congsong2560的博客 433

AT&T 汇编调用C库函数

注:以下内容为学习笔记,多数是从书本、资料中得来,只为加深印象,及日后参考。然而本人表达能力较差,写的不好。因非翻译、非转载,只好选原创,但多数乃摘抄,实为惭愧。但若能帮助一二访客,幸甚! 前面尝试过使用write系统调用来显示CPU Vendor ID,这里将在AT&T 汇编中调用C 库函数中的printf 来打印信息. 汇编调用C函数,方法很简单: 1)调用就是使用call 指令

孤舟钓客 3845

52、汇编语言中的时间计算、AT&T 指令助记符及随机数生成

本文详细讲解了汇编语言中如何计算程序运行时间、理解AT&T指令助记符的语法规范以及如何使用标准C库函数生成伪随机数。通过代码示例,介绍了调用time函数获取时间差、AT&T与Intel语法的区别、内存引用方式,以及利用srand和rand函数生成不同位数随机数的完整汇编程序。适合希望深入了解底层编程和与C库交互的开发者参考学习。

fff88的博客 105

10、汇编语言程序的编译、调试与C库函数使用

本文介绍了汇编语言程序的编译、调试方法以及如何在汇编中使用C库函数。内容涵盖使用gcc汇编时的标签问题、通过gdb进行程序调试的技巧、查看寄存器和内存数据的方法,以及如何链接和使用C库函数如printf。文中还详细说明了常见问题的解决方法,并提供了完整的操作步骤和关键技术点分析,适合希望掌握汇编开发的开发者参考。

uu89012的博客 69

AT&T汇编语言初步

关于AT&amp;T汇编语言,网上有许多语法介绍,大家可以移步参考。我这里主要介绍几个汇编实例,如何在linux系统编译,以及浮点数的输出。 一. 一个简单的汇编实例:输出hello,world! .section .data **#以下为数据段** output: *...

Jundesky的博客 2433

STM32之W5500网络通信_w5500 profinet

*初始化8个socket*/setSHAR(ConfigMsg.mac);/*配置Mac地址*/setSUBR(ConfigMsg.sub);/*配置子网掩码*/setSIPR(ConfigMsg.lip);/*配置Ip地址*/setGAR(ConfigMsg.gw);/*配置默认网关*/setRTR(2000);/*设置溢出时间值*/setRCR(3);/*设置最大重新发送次数*/

2501_90250923的博客 1460

使用call命令调用函数(AT&T汇编)

  代码如下: .section .data output: .asciz "This is section %d\n" .section .text .globl main main: pushl $1 pushl $output call printf add $8, %esp # should clean up stack call overhere pushl $3 pushl $output call printf

健身房 875

《Ventoy 制作系统安装 U 盘的具体步骤》

然后您可以在电脑的磁盘管理中对 U 盘进行快速格式化,选择 FAT32 或 NTFS 文件系统。至此,Ventoy 系统安装 U 盘就制作完成了。您可以在需要安装系统的电脑上,从 U 盘启动,然后选择相应的系统镜像进行安装。安装完成后,将您需要的操作系统镜像文件(如 Windows、Linux 等的 ISO 格式镜像)复制到 U 盘的根目录。在安装程序中,选择您插入的 U 盘设备,确保选择正确,以免误操作。2. 确认选择的 U 盘盘符正确,防止误操作导致其他磁盘数据丢失。点击“安装”按钮,等待安装完成。

jiyiwangluokeji的博客 2664

告别‘火龙’:实测BES2800/RK2108等主流芯片,聊聊AI眼镜的功耗与散热‘内卷’实战

本文深入探讨了AI智能眼镜在功耗与散热方面的挑战,重点分析了恒玄BES2800和瑞芯微RK2108等主控芯片的能效表现。通过实测数据和优化策略,揭示了在6nm工艺、异构计算和系统级散热方案下的实战经验,为AI眼镜的功耗管理提供了实用解决方案。

weixin_30839881的博客 945

汇编语言学c,AT&T汇编语言学习:利用c库、文件读写

AT&amp;T汇编、调用C库函数、读/写文件d0321:更新读文件代码(图片)以后会更新代码版。d0329:汇编文本读取、简单动画。================================================本文是利用AT&amp;T风格调用C库,来读取文件内容。(如果安装的是64位的linux,需要安装32位的C库。并在利用gcc编译的时候加入-m32指令。)64位利用32...

weixin_34663092的博客 485

Lattice FPGA 开发流程(以 ECP5 为例)

以下是以 Lattice ECP5 FPGA 为例的开发流程,涵盖从需求分析到硬件部署的完整步骤。ECP5 系列是 Lattice 提供的高性能、低功耗 FPGA,适用于通信、工业控制和嵌入式系统等领域。

u011732210的博客 1256

汇编速查-IA32汇编helloword

介绍汇编语法,一个hello word,int 80H系统调用,使用C库的简介

giantpoplar的专栏 1853

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2038

句向量(句嵌入)模型sent2vec的训练及应用

本文讨论NLP中的句向量模型(sent2vec),也就是将一个完整的句子映射成一个实数向量的技术。这方面已经发表的成果也是比较多的,本文中所涉及的技术主要源自NAACL 2018的一篇论文,其中提出的sent2vec模型可以理解为词嵌入技术中经典的CBOW方法的扩展,该所谓的扩展中一个重要改进就是引入了n-gram

白马负金羁 1万+

AT&T 汇编总结篇

1、汇编器和链接器 GNU binutils 里的 as、ld 2、通常一个汇编程序包含三个部分 The data section //初始化的数据部分 The bss section //未初始化的数据部分以0填充 The text section //程序部分 汇编器声明一个部分 使用 .section 指令,后面跟一个参数,下图是一个基本...

Rand Tsui 1039

C#上位机通信层封装:西门子S7NetPlus库的优雅使用

支持S7-1200/1500(机架号0,槽号1)、S7-300/400(机架号/槽号需根据实际配置);支持位(Bit)、字节(Byte)、字(Word)、双字(DWord)、浮点数(Float/Double)等数据类型的读写;支持DB块、输入寄存器(I)、输出寄存器(Q)、内存寄存器(M)、定时器(T)、计数器(C)的操作;轻量无依赖,兼容.NET 5+。首先定义核心枚举和常量,统一规范参数类型,避免硬编码。/// 西门子PLC型号(对应不同的机架/槽号默认配置)

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1085

在汇编语言中使用C库函数

在 GNU 汇编: 第一个汇编程序 中, 利用Linux 系统调用将读到的 cpuid 显示到控制台上, 还有不使用系统调用的其他方法, 其中一种就是使用 C 库函数. 实例 demo.s .section .data output: .asciz "The processor Vender ID is '%s'\n" .section .bss .lcomm buffer, 12 .section .text .globl _start _start: // 获取 CPU

qq_36525177的博客 1001

ansys license许可证问题:Ansys License Manager Release 2024 R1...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 5365

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【汇编程序】调用C库函数

当我们在VS环境下学习汇编语言的时候,调用Win32的API函数进行控制台的输入和输出是非常麻烦的。但是C的库函数怎么调用又好像不清楚,以下是在VS2017环境下调用C库函数printf和scanf函数实现控制台输入输出. 第一步:包含C库文件 INCLUDELIB kernel32.lib;这个库用于调用Win32的ExitProcess API函数. INCLUDELIB ucrt.li...

yiftss 2842

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

AT&T汇编语言学习:利用c库、文件读写

AT&T汇编入门:调用C库函数、读/写文件 d0329:汇编文本读取、简单动画。

He11o_Liu的专栏 2527

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

[0x06] nasm汇编 [调用C库函数]

在nasm中,调用C库函数,需要使用extern关键字,后面跟函数名称。 例子test6_1.asm ; test6_1.asm ; nasm -f elf64 -o test6_1.o test6_1.asm ; gcc -o test6_1 test6_1.o ; 或者链接: ld -o test6_1 test6_1.o -lc --dynamic-linker /lib/x86_64...

天马行空 1714

部分C库函数重写以及反汇编分析之memset()

/*/////////////////////////////////////////////////////////////////////////////////////// 函数解释:将s中前n个字节替换为ch并返回s;    memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。 ////////////////////////////

乘风的专栏 3768

汇编语言使用C库函数和Linux动态链接

使用printf 代码 #cpuid2.s -- Using C labrary calls .section .data output: .asciz "The processor Vender is '%s'\n" .section .bss .lcomm buffer, 12 .section .text

编程的本质是数学问题 2418

C指针原理(21)-C指针基础-AT&T汇编

helloworld-高级版 .section .data#初始化的变量 output: .ascii "hello,world\n" #要打印的字符串,.data为初始化值的变量。output是标签,指示字符串开始的位置,ascii为数据类型 .section .bss#未初始化的变量,由0填充的缓冲区 .lcomm num,20 #lcomm为本地内存区域,即本地汇编外...

The research on computer technolog 569
上一篇: AT&T汇编之32位与64位系统调用
下一篇: AT&T汇编之冒泡排序
FreeeLinux
博客等级 码龄11年 421粉丝 356原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值