64位Centos7上汇编运行32位程序

本文介绍了如何在64位Centos7系统中编译和运行32位汇编程序,涉及-as-32选项、动态函数库、glibc的32位版本安装及动态加载器的问题。
摘要由CSDN通过智能技术生成

64位Centos7上汇编运行32位程序

首先贴上源代码。

#文件名test.s
.data
msg: .string "$0-$8=%d\n"
.text
.global _start
_start:
movl $0, %eax
movl $8, %ebx
subl %ebx, %eax
pushl %eax
lea msg, %eax
pushl %eax
call printf
movl $0, %ebx
movl $1, %eax
int $0x80

功能非常简单,就是计算eax减去ebx的值,然后调用c语言printf函数输出(参数列表中的参数逆向压入堆栈,然后“call printf“即可)。

  1. 汇编
    上面的代码采用的是AT&T语法,所以使用GNU as汇编器。命令如下
    as –32 -otest.o test.s
    关键是–32选项,它告诉汇编器这是32位的程序。否则,默认生成64位的目标文件。
  2. 链接
    在Linux系统中许多软件都会使用彼此提供的函数库来完成特殊的功能。Linux中的函数库分为动态函数库和静态函数库。

静态函数库。这类函数库通常扩展名为libxxx.a。在程序编译的时候会直接被整合到程序中,生成的程序可以独立执行。程序文件通常比较大,当函数库升级时整个程序需要重新编译才能使用新版本的函数库。
动态函数库。这类函数库的扩展名为libxxx.so。在程序编译时候,程序中仅会保留指向函数库的Pointer而已,程序执行时需要函数库时会根据这个Pointer去相应的路径读取。程序文件比较小,函数库升级不需要重新编译程序就可使用新版的函数库(前提是函数库的名称路径不变)。

上面说了这么多,是因为后面碰到的问题与这个概念相关。先用链接命令尝试一下,当然是会报错的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值