我的操作系统是ubuntu 13.04 64位
我浪费了很多时间来解决它 真的需要你的帮助
此test.s返回
Accessing a corrupted shared library
.code32
.section .data
par1:
.int 33
msg:
.asciz "%d\n"
.section .text
.globl _start
_start:
pushl $par1
pushl $msg
call printf
cikis:
movl $1,%eax
movl $1,%ebx
int $0x80
ldd test.out
ldd test.out
linux-vdso.so.1 => (0x00007fff615fe000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fbfb56f8000)
/lib32/libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x00007fbfb5ae0000)
生成文件
as test.s -o test.o
ld -dynamic-linker /lib/ld-linux.so.2 -lc test.o -o test.out
//我也试过
ld -dynamic-linker /lib32/ld-linux.so.2 -lc test.o -o test.out
如何在64位ubuntu上使用气体中的C函数
答案 0 :(得分:0)
更改汇总和关联计划的方式以及如何推送$par1
而不是par1
:
.section .data
n:
.int 33
fmt:
.asciz "n: %d\n"
.section .text
.global _start
_start:
pushl n
pushl $fmt
call printf
movl $1, %eax
movl $0, %ebx
int $0x80
汇总并链接:
cc -nostdlib -Os -Wall -g3 -m32 -lc printf-x86.S -o printf-x86
cc 这里只是 gcc 的别名。常规编译器驱动程序将知道传递给的正确选项和 ld 加上它意味着汇编器源(.S)通过C预处理器传递并且您可以使用标头像<sys/sdt.h>
这样的文件。
这是一个GNU make片段,以备不时之需:
%: %.S
$(CC) -nostdlib $(CFLAGS) $(LDFLAGS) $< -o $@
printf-x86: CFLAGS+=-m32
printf-x86: LDFLAGS+=-lc