A
Size: a a a
A
AN
AN
A
A
AN
E
[sam@localhost FASM]$ gcc hello.s -o hello
/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/10/../../../../lib64/crt1.o: в функции «_start»:
(.text+0x24): неопределённая ссылка на «main»
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Мне
кажется что проблема возникла с линковщикомs
[sam@localhost FASM]$ gcc hello.s -o hello
/usr/bin/ld: /usr/lib/gcc/x86_64-redhat-linux/10/../../../../lib64/crt1.o: в функции «_start»:
(.text+0x24): неопределённая ссылка на «main»
collect2: ошибка: выполнение ld завершилось с кодом возврата 1
Мне
кажется что проблема возникла с линковщикомE
.data /*Поместить следующее в сегмент данных*/
hello_str: /*Наша строка*/
.string "Hello, World!\n"
.set hello_str_lenght, . - hello_str - 1 /*Длинна строки*/
.text /*Поместить следующее в сегмент кода/*
.globl main /*main - глобальный символ, видимый за пределами текущего файла*/
.type main, @function /*main - функция (не данные)*/
main:
movl $4, %eax /*Поместить номер сис. вызова write=4 в регистр %eax*/
movl $1, %ebx /*Первый параметр - в регистр %ebx, номер файлового
дескриптора stdout - 1*/
movl $hello_str, %ecx /*Второй параметр - в регистр %ecx, указатель на строку*/
movl $hello_str_lenght, %edx /*Третий параметр - в регистр %edx;Длина строки*/
int $0x80 /*Вызвать прерывание 0x80*/
movl $1, %eax /*Номер системного вызова exit - 1*/
movl $0, %ebx /*Передать 0 как значение параметра*/
int $0x80 /*Вызвать exit(0)*/
.size main, . - main /*Размер функции main*/
s
.data /*Поместить следующее в сегмент данных*/
hello_str: /*Наша строка*/
.string "Hello, World!\n"
.set hello_str_lenght, . - hello_str - 1 /*Длинна строки*/
.text /*Поместить следующее в сегмент кода/*
.globl main /*main - глобальный символ, видимый за пределами текущего файла*/
.type main, @function /*main - функция (не данные)*/
main:
movl $4, %eax /*Поместить номер сис. вызова write=4 в регистр %eax*/
movl $1, %ebx /*Первый параметр - в регистр %ebx, номер файлового
дескриптора stdout - 1*/
movl $hello_str, %ecx /*Второй параметр - в регистр %ecx, указатель на строку*/
movl $hello_str_lenght, %edx /*Третий параметр - в регистр %edx;Длина строки*/
int $0x80 /*Вызвать прерывание 0x80*/
movl $1, %eax /*Номер системного вызова exit - 1*/
movl $0, %ebx /*Передать 0 как значение параметра*/
int $0x80 /*Вызвать exit(0)*/
.size main, . - main /*Размер функции main*/
_main
. Подробнее https://en.wikipedia.org/wiki/Name_decorationE
E
The need for name mangling arises where the language allows different entities to be named with the same identifier as long as they occupy a different namespace (typically defined by a module, class, or explicit namespace directive) or have different signatures (such as in function overloading).
смотря
на свой код и видя два main я думаю, что проблема в этом, но не уверен :)s
The need for name mangling arises where the language allows different entities to be named with the same identifier as long as they occupy a different namespace (typically defined by a module, class, or explicit namespace directive) or have different signatures (such as in function overloading).
смотря
на свой код и видя два main я думаю, что проблема в этом, но не уверен :)