Size: a a a

Ассемблер

2020 July 29

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
из этого примера, какой бы ты путь исправил на свой?
источник

AN

Alex Naraito in Ассемблер
Сек, я свой код скину и на нём покажу
источник

AN

Alex Naraito in Ассемблер
Это мой код, библиотека на си, которую я подключаю называется dllfasm . so (предупреждение: это всё чисто тест ) Её код тоже могу скинуть, но там лишь один include и одна функция под именем hello321, которая выводит сообщение, но чтобы всё работало нужно, чтобы библиотека находилась в /usr/lib64, а мне надо чтобы туда ничего не закидывать, а программа, чтобы брала либу из папки с бинарём, так можно сделать?
источник

RS

Rusty Shackleford in Ассемблер
Alex Naraito
Это мой код, библиотека на си, которую я подключаю называется dllfasm . so (предупреждение: это всё чисто тест ) Её код тоже могу скинуть, но там лишь один include и одна функция под именем hello321, которая выводит сообщение, но чтобы всё работало нужно, чтобы библиотека находилась в /usr/lib64, а мне надо чтобы туда ничего не закидывать, а программа, чтобы брала либу из папки с бинарём, так можно сделать?
в линаксе проще nasm юзать, по нему намного больше мануалов
источник

A

Aleksandr in Ассемблер
gas
источник

A

Aleksandr in Ассемблер
чтобы никому не было слишком легко
источник

AN

Alex Naraito in Ассемблер
Rusty Shackleford
в линаксе проще nasm юзать, по нему намного больше мануалов
Меня угораздило в fasm 😂
источник

RS

Rusty Shackleford in Ассемблер
Alex Naraito
Меня угораздило в fasm 😂
----линковка динамической библиотеки----------
----------------------------------------------
>$ nasm -f elf64 libP.asm -o libP.o
>$ ld -shared libP.o -o libP.so
>$ cp libP.so /lib/libP.so
>$ nasm -f elf64 main.asm -o main.o
>$ ld --dynamic-linker /lib64/ld-linux-x86-64.so.2 -L . -l P main.o -o main_dynamic
>$ file main_dynamic
main_dynamic: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, not stripped

----линковка статической библиотеки----------
----------------------------------------------
>$ nasm -f elf64 libP.asm -o libP.o
>$ nasm -f elf64 main.asm -o main.o
>$ ld main.o libP.o -o main


вот мои старые заметки по nasm, может поможет
источник

RS

Rusty Shackleford in Ассемблер
как-то давно вникал в тему, забыл уже все толком из за неиспользования на практике
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
я примерно могу сказать как я понимаю данную ситуацию с точки зрения винды (там все такде есть исполняемые файлы exe, динамические билиотеки dll, статические билиотеки lib и объектные файлы obj).
приамбула:
фасм отличает от всех остальных амов т очто написание простых прогр можно обходится без линковщика. всю необходимую информацию о том что компилить на выходе мы получаем (пишем сами) в самом исходнике через директиву format, при этом фасм сам собирает шабку прорраммы из параметров format (dll PE ELF COFF и тд). но он также позволяет собирать проги как и простым асмом через линковщик, для этого (в случае винды) в формате надо указыавать COFF, при этом создастся бинарник с расширением obj, который в дальнейшем и скармливается линковщику.

если взять твой случай, то как ты и сказал ты собираешь библиотеку на си и хочешь ее вызывать из фасма -кода. как я и сказал, если использовать статические библиотеки то надо использовать линоквщик, а следовательно и сам асмофайл должен быть таким же объектником. все это (амовый и сишние бинарники) должно скармливаться линковщику
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
я примерно могу сказать как я понимаю данную ситуацию с точки зрения винды (там все такде есть исполняемые файлы exe, динамические билиотеки dll, статические билиотеки lib и объектные файлы obj).
приамбула:
фасм отличает от всех остальных амов т очто написание простых прогр можно обходится без линковщика. всю необходимую информацию о том что компилить на выходе мы получаем (пишем сами) в самом исходнике через директиву format, при этом фасм сам собирает шабку прорраммы из параметров format (dll PE ELF COFF и тд). но он также позволяет собирать проги как и простым асмом через линковщик, для этого (в случае винды) в формате надо указыавать COFF, при этом создастся бинарник с расширением obj, который в дальнейшем и скармливается линковщику.

если взять твой случай, то как ты и сказал ты собираешь библиотеку на си и хочешь ее вызывать из фасма -кода. как я и сказал, если использовать статические библиотеки то надо использовать линоквщик, а следовательно и сам асмофайл должен быть таким же объектником. все это (амовый и сишние бинарники) должно скармливаться линковщику
я так понимаю so это аналог dll в винде, то вызывать можно из фасмофайла как в притмере выше.
источник

AN

Alex Naraito in Ассемблер
Да so это аналог dll (как я понимаю), но я его и вызываю, вот только, чтобы программа нашла его нужно его положить в определённый каталог, в этом и проблема, что нужно что-то куда-то перекладывать
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
и еще надо знать формат эльфа, эт опможет монимать как правильно писать. так например макрос interpreter создает отдельную секцию, для чего это и в каком формате там должна храниться информация я не знаю. но думаю по аналогии с виндой секция импорта/экспорта, там вроед функции прописываются или/и адреса их
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
еще надо знать как вызываются/обращаются к этим функциям прорамма с точки сзрения ОС. что по каккому пути ищется какие данные проверяются
источник

AN

Alex Naraito in Ассемблер
Как я вижу проще работать со статикой, да?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
в винде вроде dll долджен лежать или рядом исполняемым файлом, который обращяется к ней, или в системной директории
источник

RS

Rusty Shackleford in Ассемблер
Alex Naraito
Меня угораздило в fasm 😂
попробуй почитать жиркова системное программирование nasm в linux
https://vk.com/doc-42890483_447409543?hash=43fd7bc45a953c6033
источник

RS

Rusty Shackleford in Ассемблер
на раз два въедишь в тему, шикарный курс у него
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
как в линухе - хз. и мне кажется Libc.so.6 это из оперы х32 ОС. а ты указываешь что у тя эльф х64. а если он х64 то и библиотека должна не так называться
источник

RS

Rusty Shackleford in Ассемблер
и на английском есть этот курс но уже в виде книги полноценной
источник