欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接

发布时间:2025/3/8 linux 32 豆豆
生活随笔 收集整理的这篇文章主要介绍了 64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld)。

以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s):

.section .data

output:

.asciz "The processor Vendor ID is '%s'\n"

.section .bss

.lcomm buffer, 12

.section .text

.globl _start

_start:

movl $0, %eax

cpuid

movl $buffer, %edi

movl %ebx, (%edi)

movl %edx, 4(%edi)

movl %ecx, 8(%edi)

pushl $buffer

pushl $output

call printf

addl $8, %esp

pushl $0

call exit

由于这是一个32位代码,并不能直接编译成64位程序,那么只能编译成32位程序了。

as -32 -gstabs -o cpuid2.o cpuid2.s

ld -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o cpuid2 -lc cpuid2.o

提示:ld: i386 架构于输入文件 cpuid2.o 与 i386:x86-64 输出不兼容

解决方法很简单,只要安装libc6-dev-i386软件包就可以了:

sudo apt-get install libc6-dev-i386

安装完成,重新汇编并连接完成后运行一下这个程序:

./cpuid2

命令行输出为:

The processor Vendor ID is 'AuthenticAMD'

由于这台机器用的是AMD处理器,所以输出CPU品牌是“AuthenticAMD”,如果是Intel的CPU,输出则是“GenuineIntel”。

总结

以上是生活随笔为你收集整理的64位 linux 32位连接器,32位汇编程序在64位Ubuntu上的汇编和连接的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。