Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Проблема с вызовом функций в gas


Автор: romanTheRoman 23.10.2011, 16:31
Здравствуйте.
Начал изучать gas, возникли проблемы с вызовом printf.

Код

.data
num:
    .quad 12
format:
    .string "%d\n"
.text
    .globl main
main:
    pushq   num 
    pushq   $format
    call    printf
    ret 


Получаю Segmentation fault
Что делать?

Автор: 500mhz 23.10.2011, 16:37
а кто esp востанавливать будет?

Автор: romanTheRoman 23.10.2011, 16:42
Код

.data
num:
    .quad 12
format:
    .string "%d\n"
.text
    .globl main
main:
    pushq   num 
    pushq   $format
    call    printf
    addq    $16, %rsp
    ret 


Ничего не изменилось (

Автор: johnyblackbird2 11.1.2012, 02:50
У меня в точности такая же проблема, что делать, подскажите кто-нибудь, плиз.

Автор: 500mhz 11.1.2012, 10:14
значит линкуете криво

Автор: johnyblackbird2 11.1.2012, 16:38
Код

as ass.s -o ass.o
ld ass.o -o ass

ass.o: In function `_start':
(.text+0xb): undefined reference to `printf'


Автор: 500mhz 11.1.2012, 16:46
ну дык ld требует указать библиотеку в который printf находится

пс

люди пользуйтесь fasm )))
Код

format ELF executable 3
entry start

include 'import32.inc'
include 'proc32.inc'

interpreter '/lib/ld-linux.so.2'
needed 'libc.so.6'
import printf,exit

segment readable executable

start:
    cinvoke printf,msg
    cinvoke exit

segment readable writeable

msg db 'Hello world!',0xA,0  

Автор: tzirechnoy 2.2.2012, 19:33
А у Вас точно ia32?

Автор: LosAngelеs 14.10.2012, 15:59
откройте amd64 abi, вы передаёте параметры в функцию через стек, это верно для i386 abi, в 64битке первые два параметры передаются через rdi, rsi если мне память не изменяет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)