Невозможно изменить имя функции в SASM - PullRequest
0 голосов
/ 26 ноября 2018

Я хочу иметь функцию _say_hi () в SASM, но она не будет ссылаться в моей программе на C:

SECTION .DATA
    hello:     db 'Hello world!',10
    helloLen:  equ $-hello

SECTION .TEXT
    GLOBAL _say_hi

_say_hi:
    mov eax,4            ; write()
    mov ebx,1            ; STDOUT
    mov ecx,hello
    mov edx,helloLen
    int 80h                 ; Interrupt
    ret                        ; Return control

Это мои вопросы

1) Могу ли я запуститькод сборки, если я изменю имя функции?Потому что когда я нажимаю Run, он говорит:

[00:10:21] Build started...
[00:10:21] Warning! Errors have occurred in the build:
/usr/lib/gcc/x86_64-linux-gnu/7/../../../../lib32/Scrt1.o: In function `_start':
(.text+0x28): undefined reference to `main'
collect2: error: ld returned 1 exit status

Затем, когда я пытаюсь связать его с моей программой на C:

#include <stdio.h>

int main(int argc, char *argv[]) {
    extern say_hi();
    say_hi();
}

, я получаю:

jorgee@jorgee-Aspire-5830TG:~/Desktop/Orga2$ gcc src/main.c asm/test.o -o main
src/main.c: In function ‘main’:
src/main.c:4:9: warning: type defaults to ‘int’ in declaration of ‘say_hi’ [-Wimplicit-int]
  extern say_hi();
         ^~~~~~
/usr/bin/ld: asm/test.o: relocation R_X86_64_32 against `.DATA' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
...