ubuntu x86-64位机器下编译32位汇编的问题

本文详细介绍了在Ubuntu x86-64系统下编译32位汇编代码时可能遇到的问题及解决方法,包括使用`as --32`指定32位编译、链接时添加`-m elf_i386`指定32位平台、链接C库以及解决找不到`-lc`的问题。通过示例代码和错误提示,指导读者如何正确配置编译和链接选项,确保32位汇编程序的顺利编译。
摘要由CSDN通过智能技术生成

示例代码:

# movtest3.s

.section .data
output:
	.asciz "The value is %d\n"
values:
	.int 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60

.section .text
.globl _start
_start:
	nop
	movl $0, %edi
loop:
	movl values(, %edi, 4), %eax
	pushl %eax
	pushl $output
	call printf
	addl $8, %esp
	inc %edi
	cmpl $11, %edi
	jne loop
	movl $0, %ebx
	movl $1, %eax
	int $0x80

汇编:as --32 movtest3.s -o movtest3.o

链接:ld -o movtest3 movtest3.o -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -L/lib/i386-linux-gnu -lc

当中可能会碰到的几个问题:

如果提示"invalid instruction suffix for `push'",是因为汇编时没有用--32来指定按32位来编译;

如果不加-m elf_i386指定基于32位平台链接,会报错:ld: i386 架构于输入文件 movtest3.o 与 i386:x86-64 输出不兼容;

如果提示ÿ

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值