Помогите! Не могу в ASMе вызвать функцию из C!

программирование assembler ASM

вот файл ASM ( FASM ) :

format ELF

public _start
extrn kernel_main

section ".text" executable

_start:
movzx edx, dl
push edx
push esi
push ebx
lgdt [gdtr]
call kernel_main
@@:
;cli
;hlt
jmp @b

section ".data" writable

gdt:
dq 0
dq 0x00CF9A000000FFFF
dq 0x00CF92000000FFFF
gdtr:
dw $ - gdt
dd gdt

А вот C с функцией к которой нужно обратиться:

typedef struct {
unsigned long long base;
unsigned long long size;
} BootModuleInfo;

void kernel_main(char boot_disk_id, void *memory_map, BootModuleInfo *boot_module_list) {
char *screen_buffer = (void*)0xB8000;
char *msg = "Hello world!";
unsigned int i = 24 * 80;
while (*msg) {
screen_buffer[i * 2] = *msg;
msg++;
i++;
}
}

Вроде бы все ок. Имена совпадают. Но вот что выдает линкер на команду

" ld -T script.ld -o bin\kernel.bin src\kernel\main.o src\boot\startup.o "

...In function 'start':
...undefined reference to 'kernel_main'
...*** [all] Error 1
Ответы:
Точно не помню уже, но может все-таки дело в неправильном вызове функции. Возможно неправильна реализация.Но на все 100 не уверен.
Возможно ошибаюсь, но при интеграции с С, глобальные метки нужно обозначать начиная со знака подчеркивания. Замените в тексте ассемблера метку kernel_main на _kernel_main.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.