LINUX.ORG.RU

[вещества][хочется странного][c][asm]Вызовы произвольных функций

 , , ,


0

0

Есть указатель полученый dlsym(). Требуестя произвести вызов полученой функции.

Предполагается нечьто такое:

void call(void* func, void* args, size_t args_size, void* res, size_t res_size)

Хотелось бы узнать стандартное кросплатформенное решение(если оно есть).

Зачем надо: для ускорения разработки биндингов.


Мое стандартное кроссплатформенное решение - это SBCL, конечно же. Там это есть. Есть библиотеки libffi, ffcall.

dmitry_vk ★★★
()
Ответ на: комментарий от Love5an

>а в чем проблема с "(" и ")"?

Когда это станет кросплатворменным ассемблером, тогда и поговорим.

SV0L0CH
() автор топика

Даже если ограничишся cdecl функциями, то тебе всеравно нужен будет прямой доступ к стеку, для того чтобы складывать туда аргументы.

AF ★★★
()
Ответ на: комментарий от SV0L0CH

вышел на https://wiki.mozilla.org/JSctypes

И не только у мозиллы, а еще и http://jsext.sourceforge.net/ и http://code.google.com/p/jslibs/ и может что-то еще, сейчас не вспомню.

Интересно, может аналог для V8 уже есть...

А про в8 не знаю. Но ты ж на спайдерманки собирался уйти. Вон и Сысоев сказал, что в8 в сервер не годится пока. А с приходом джагерманки мозилла и по скорости гугл сделает, если те не зачешутся и не начнут трейсинг жит пилить или что-то похожее.

vga ★★
()

Я так и не понял в чем проблема вызвать функцию по указателю в С ? зачем какие-то левые обертки ? Или речь идет о том что ты заранее не знаешь количество и тип параметров ? Если знаешь заранее - вызывай напрямую, компилятор конкретной архитектуры сам знает о том как передать параметры.

anonymous
()
Ответ на: комментарий от anonymous

Например:

void (*func)(int arg1, int arg2, int arg3); 
....
func = (void (*)(int, int, int))dlsym(хрю_хрю);
func(1, 2, 3);

anonymous
()
Ответ на: комментарий от vga

>А про в8 не знаю. Но ты ж на спайдерманки собирался уйти.

s/уйти/перейти/

Вообще рассматриваю все возможные варианты. Что касается spidermonkey, то для него не нашёл подходящего аналога nodejs. В nodejs меня почти всё устраивает, не хватает только возможности писать биндинги на javascript, собственно это и буду пытатся исправить.

Вон и Сысоев сказал, что в8 в сервер не годится пока.

Вполне возможно. Но это не повод сразу забивать на V8. Тем более я рассматриваю возможность написания кода одинаково работающего в spidermonkey, V8, QtScript и даже может быть в WScript.

SV0L0CH
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.