Сделать библиотеку в 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