Сделать библиотеку в ASM доступной к ней в C?

Я знаю, что вы можете напрямую поместить ASM в C, используя ASM, но мне было интересно, возможно ли создать библиотеку в Assembly, скомпилировать ее и затем получить доступ к функциям, объявленным в этой библиотеке из C?

Так что я знаю, что должен использовать предварительно написанные библиотеки, но это только для образовательных целей и для развлечения! Например, скажем, я хотел использовать вызов sys для распечатки на экран, теперь я написал для этого некоторую сборку и назвал функцию print, а затем скомпилировал ее в какой-то файл lib.so/.lib/.a Что бы я сделал в этот момент, чтобы обратиться к этой функции в этой библиотеке?

Должен ли я просто написать функцию и связать ее при компиляции?

Спасибо:)

1 ответ

Да, вы просто пишете функцию и компилируете / собираете ее в.o. Затем вы можете использовать.o, как.o из компилятора. Если вы хотите превратить его в библиотеку, просто используйте его как входные данные для ar и ranlib.

Простейший пример использования gcc на x86:

Поместите это в test.s:

.globl some_func
some_func:
    ret

Компиляция: cc -c test.s

Это создаст файл test.o с определенной функцией some_func.

Более полный пример функции foo " ничего не делать", которая не принимает аргументов (gcc x86-64):

.globl foo
.type   foo, @function
foo:
    pushq   %rbp
    movq    %rsp, %rbp
    leave
    ret
Другие вопросы по тегам