Funkcje dynamicznie łądowane i zmienna liczba parametrów

0

Linux, C:

Potrzebuję ładować funkcje z bibliotek dynamicznych (*.so). Poszczególne funkcje mają różną liczbę parametrów nieokreśloną w momencie kompilowania programu z którego są wywoływane, a dopiero później, w chwili uruchamiania programu.

Poradziłem sobie wstawką asemblerową, która przygotowuje stos i rejestry, ale czy można to zrobić w C?

ml.

1

Chcesz dynamicznie ustalać jakie dana funkcja przyjmuje parametry? Jak dla mnie to albo wielki switch nazwa⟶typ, albo jakiś libjit i jitujesz.

1

Z tego co mi wiadomo nie da się odczytać prototyp funkcji C (liczby i typów argumentów) zapisanej w dynamicznej bibliotece.
Przynajmniej tak twierdzi ta odpowiedź na SO: https://stackoverflow.com/a/24655134/1387438

W C++ jest name mangling wiec nazwa funkcji zawiera w sobie opis argumentów, ale parsowanie tego to straszny ból głowy.
Obawiam się że bez wstawek asemblerowych bedzie ciężko.

No chyba, że w czasie kompilacji masz informacje jakie to są prototypy funkcji.

Generalnie ani C ani C++ nie zapewniają meta danych.

Z drugiej strony na Linux są narzędzia, które pozwalają podejrzeć listę funkcji: objdump -T *.so (na Windows też), więc jak się bardzo uprzeć, to pewnie się da, ale będzie to bardzo skomplikowane.

0

Chyba chodzi Ci o to:
https://sourceware.org/libffi/

0

Tak, oczywiście wiem jakie parametry ma wywoływana funkcja.

Tu chodzi o program, który pozwoli uruchomić ze wskazanej biblioteki (nazwa pliku *.so), wskazaną funkcję (po nazwie) z odpowiednimi dla niej parametrami. Przygotowanie parametrów i konwersja do odpowiedniej postaci bajtowej to nie problem.

Chodzi tylko o to czy w C jest możliwość przygotowania stosu i rejestrów w celu przekazania przygotowanych parametrów.

1 użytkowników online, w tym zalogowanych: 0, gości: 1