Привет, у меня очень сложный вопрос. Я написал функцию в сборке x64, а затем я хотел использовать ее в моем main.c. Я включил функцию сборки через файл заголовка. main.c:
#include <stdio.h>
#include "myunistd.h"
#include "mystddef.h"
int main(){
mywrite(1, "Test", 4);
}
myunistd.h:
#ifndef MYUNISTD_H
#define MYUNISTD_H
struct myrusage {};
ssize_t spastwrite(int fd, const void *buf, size_t count);
#endif
myunistd.s:
global mywrite
section .text
mywrite:
mov r8, rdi ; parameters in registers only for testing
mov r9, rsi
mov r10, rdx
mov rax, 1 ; write(
mov rdi, r8 ; STDOUT_FILENO,
mov rsi, r9 ; String,
mov rdx, r10 ; sizeof String
syscall ; );
mov rax, 60 ; exit(
mov rdi, 0 ; EXIT_SUCCESS
syscall ; );
Функция работает, но у меня нет возвращаемого аргумента, как воригинал написать системный вызов. Также имейте предупреждение "неявное объявление функции 'mywrite' недопустимо в C99". Также полезно знать, что я определил size_t как unsigned long в mystddef.h. Я не знаю. Надеюсь, что вы можете помочь:)
Скомпилировано с: nasm -f elf64 myunistd.s -o myunistd.o
clang main.c myunistd.o -o exe
Thx