Название: Переслать код от клиента серверу Отправлено: DoZENT от Март 07, 2009, 19:42 Привет всем! Передо мной встала несколько необычная проблема: мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) от клиента серверу и выполнить его на сервере. Куда копать и вообще возможно ли это? Заранее спасибо.
Название: Re: Переслать код от клиента серверу Отправлено: BRE от Март 07, 2009, 19:49 мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) Что здесь имеется ввиду?Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 07, 2009, 20:09 мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) Что здесь имеется ввиду?Название: Re: Переслать код от клиента серверу Отправлено: BRE от Март 07, 2009, 20:15 Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер? Бинарный код?В принципе это конечно возможно - смотри эксплоиды. ;) Только нужно понимать, что на свете есть много процессоров разных архитектур, которые работают под управлением огромного числа операционных систем и т.д. и т.п. Ты лучше задачу свою расскажи. Что за клиент, что за сервер. Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 08, 2009, 19:20 Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер? Бинарный код?В принципе это конечно возможно - смотри эксплоиды. ;) Только нужно понимать, что на свете есть много процессоров разных архитектур, которые работают под управлением огромного числа операционных систем и т.д. и т.п. Ты лучше задачу свою расскажи. Что за клиент, что за сервер. если оформить функцию как новый тип: Код: typedef void(*MyFunc)(int a); Название: Re: Переслать код от клиента серверу Отправлено: BRE от Март 08, 2009, 19:29 задача - именно выполнение произвольного кода на чужой машине (понимаю, как это звучит, но не вирус я пишу, не вирус))) ) Так вот по этой причине java и появилась....меня вот мысль посетила: Ты можешь и кусок памяти с кодом функции передать, это не проблема.если оформить функцию как новый тип: Код: typedef void(*MyFunc)(int a); Но для ее нормального выполнения на стороне сервера ей необходимо подготовить окружение (с учетом процессора для которого этот код компилировался, адреса ее работы и ..... ). Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 08, 2009, 19:46 Так вот по этой причине java и появилась.... java для меня не подходит - скорость выполнения критичнаТы можешь и кусок памяти с кодом функции передать, это не проблема. есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.Но для ее нормального выполнения на стороне сервера ей необходимо подготовить окружение (с учетом процессора для которого этот код компилировался, адреса ее работы и ..... ). Название: Re: Переслать код от клиента серверу Отправлено: BRE от Март 08, 2009, 19:54 есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста. У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт. Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 08, 2009, 20:43 есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста. У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт. Название: Re: Переслать код от клиента серверу Отправлено: BRE от Март 08, 2009, 20:51 есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста. У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт. А вообще, позиционно-независимый код (PIC), процессы, эксплоиды... ну а дальше уже само пойдет. Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 08, 2009, 21:53 есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста. У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт. А вообще, позиционно-независимый код (PIC), процессы, эксплоиды... ну а дальше уже само пойдет. Название: Re: Переслать код от клиента серверу Отправлено: BRE от Март 08, 2009, 22:21 Вот как вы из dll вызываете функцию? Вы же не заморачиваетесь, под какую архитектуру процессора эта dll. Вы просто вызываете ее. Суть моего вопроса: можно ли функцию передать на сервер как некоторую переменную и там исполнить ее? Конечно вы не заморачиваетесь, за вас заморачивается операционная система. Она загружает dll в память процесса, настраивает адреса ее функций, что бы программа могла их вызывать и т.д. ;)Напиши необходимую функцию, дизассемблируй ее и посмотри какие функции она вызывает, по каким адресам и скажи как ты сможешь на сервере обеспечишь, что-бы по этим адресам находились необходимые функции? Qt активно сохраняет свои состояния в статических структурах, как ты будешь настраивать их на стороне сервера? Название: Re: Переслать код от клиента серверу Отправлено: drsm от Март 09, 2009, 00:14 Привет всем! Передо мной встала несколько необычная проблема: мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) от клиента серверу и выполнить его на сервере. Куда копать и вообще возможно ли это? Заранее спасибо. копай в сторону виртуальных машин и байткода.это имхо единственный реальный вариант сделать то, что ты хочешь. а "из длл" передать функцию по сети, это не получится. :) Название: Re: Переслать код от клиента серверу Отправлено: fuCtor от Март 09, 2009, 09:48 А если посмотреть в сторону RPC, или тех же скриптов, которые поддерживает Qt, Может и это подойдет для решения задачи.
Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 09, 2009, 12:08 понятно, спасибо всем! буду копировать dll на сервер.
Название: Re: Переслать код от клиента серверу Отправлено: DoZENT от Март 09, 2009, 14:38 встала новая проблема: а как аргументы функции передать на сервер? функция-то произвольная, всегда разное количество аргументов, разные их типы...
Название: Re: Переслать код от клиента серверу Отправлено: Mixolap от Март 09, 2009, 23:07 То есть тебе надо определиться с протоколом.
Посмотри в сторону xml-rpc (http://ru.wikipedia.org/wiki/XML-RPC) Название: Re: Переслать код от клиента серверу Отправлено: nanit от Март 09, 2009, 23:16 А допустимо ли использовать функции вроде
int someFunc(const int argc, const QVariant *argv[]); и передавать аргументы между клиентом и сервером, предварительно завернув в QDataStream? Название: Re: Переслать код от клиента серверу Отправлено: ритт от Март 09, 2009, 23:30 допустимо всё, что только можешь придумать. важно правильно реализовать это.
посмотри на libqxt - у них уже есть реализация механизма вызова слотов через сеть (qxtpeer, если правильно помню). |