Как вызвать внешнюю функцию на ассемблере?
Я попытался использовать внешнюю функцию в коде сборки:
.section .rodata
.LC0:
.string "My number is: %lld"
.text
.globl start
start:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movq $12345, -8(%rbp)
movq -8(%rbp), %rax
movq %rax, %rsi
movl $.LC0, %edi
movl $0, %eax
call printf # my external function
# exit-syscall
mov $1, %eax
mov $0, %ebx
int $0x80
Я собрал и связал с:
as -o myObjfile.o mySourcefile.s
ld -e start -o myProgram -lc myObjfile.o
Исполняемый файл - это сборка, но он не запускается, так что с ним не так?
1 ответ
Если я правильно понимаю, находится ли функция, которую вы хотите вызвать, в библиотеке C, вы можете просто объявить ее как внешнюю функцию.
.section .rodata
.LC0:
.string "My number is: %lld"
.text
.extern printf #declaring the external function
.globl start
start:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movq $12345, -8(%rbp)
movq -8(%rbp), %rax
movq %rax, %rsi
movl $.LC0, %edi
movl $0, %eax
call printf # my external function
# exit-syscall
mov $1, %eax
mov $0, %ebx
int $0x80
Если это не работает, попробуйте явно связать его с stdlib.h