2013-05-14 4 views
0

Моя ОС 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) 

Makefile

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 

Как я могу использовать функции C в газе на 64 битной Ubuntu

+0

Попробуйте добавить '-melf_i386' файл' командной строки ld' ... –

ответ

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 

куб.см здесь просто псевдоним для НКУ. Обычный драйвер компилятора будет знать правильные опции для перехода к как и ld плюс это означает, что ваш ассемблерный источник (.S) проходит через препроцессор C, и вы можете использовать заголовочные файлы, такие как <sys/sdt.h>.

Вот GNU сделать фрагмент в случае, если вам это нужно:

%: %.S 
     $(CC) -nostdlib $(CFLAGS) $(LDFLAGS) $< -o [email protected] 
printf-x86: CFLAGS+=-m32 
printf-x86: LDFLAGS+=-lc 
+0

возвращается/USR/бен/LD: не может найти -lc collect2: ошибка: л.д. возвращается статус 1 выхода , когда я пишу куб.см -nostdlib -Os -Wall -g3 -m32 -lc Printf-x86.S -o Printf-x86 – Assembler

+0

@Assembler, установить пакеты разработки i686 GLibC. Вероятно, у вас есть только x86-64. Команда «yum install glibc-devel.i686» в Fedora, «apt-get install ia32-libs-dev» или «apt-get install libc6-dev: i386» на Ubuntu и Debian. – scottt

+0

Скотт, ты был прав, спасибо за помощь – Assembler

Смежные вопросы