Você precisa especificar que o símbolo foo
corresponde a uma função :
[BITS 64]
global foo:function
section .text
foo:
mov rax, 1
ret
Acabei de fazer algumas funções básicas em asm que eu compilo em uma biblioteca compartilhada. Como:
BITS 64
global foo
section .text
foo:
mov rax, 1
ret
Eu compilei com:
nasm -f elf64 foo.S -o foo.o && gcc -shared foo.o -o libfoo.so
Eu tenho um teste principal:
#include <stdio.h>
int foo();
int main()
{
printf("%d\n", foo());
return (0);
}
Se eu o compilei diretamente com o foo.o, tudo funcionou bem. Mas se eu compilasse assim:
gcc main.c -L. -lfoo
Eu recebo este erro:
/usr/.../bin/ld: warning: type and size of dynamic symbol 'foo' are not defined
Eu achei que era porque o protótipo não foi declarado, mas eu recompilei foo.o com um arquivo lib.h contendo o protótipo, e o mesmo problema ocorreu.
É necessário que eu complete outra seção do arquivo elf?
Obrigado.
Você precisa especificar que o símbolo foo
corresponde a uma função :
[BITS 64]
global foo:function
section .text
foo:
mov rax, 1
ret