Russian Qt Forum
Ноябрь 23, 2024, 01:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Переслать код от клиента серверу  (Прочитано 10204 раз)
DoZENT
Гость
« : Март 07, 2009, 19:42 »

Привет всем! Передо мной встала несколько необычная проблема: мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) от клиента серверу и выполнить его на сервере. Куда копать и вообще возможно ли это? Заранее спасибо.
Записан
BRE
Гость
« Ответ #1 : Март 07, 2009, 19:49 »

мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов)
Что здесь имеется ввиду?
Записан
DoZENT
Гость
« Ответ #2 : Март 07, 2009, 20:09 »

мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов)
Что здесь имеется ввиду?
Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер?
Записан
BRE
Гость
« Ответ #3 : Март 07, 2009, 20:15 »

Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер?
Бинарный код?
В принципе это конечно возможно - смотри эксплоиды.  Подмигивающий
Только нужно понимать, что на свете есть много процессоров разных архитектур, которые работают под управлением огромного числа операционных систем и т.д. и т.п.
Ты лучше задачу свою расскажи.
Что за клиент, что за сервер.
Записан
DoZENT
Гость
« Ответ #4 : Март 08, 2009, 19:20 »

Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер?
Бинарный код?
В принципе это конечно возможно - смотри эксплоиды.  Подмигивающий
Только нужно понимать, что на свете есть много процессоров разных архитектур, которые работают под управлением огромного числа операционных систем и т.д. и т.п.
Ты лучше задачу свою расскажи.
Что за клиент, что за сервер.
задача - именно выполнение произвольного кода на чужой машине (понимаю, как это звучит, но не вирус я пишу, не вирус))) ) меня вот мысль посетила:

если оформить функцию как новый тип:
Код:
typedef void(*MyFunc)(int a);
писать в сокет переменную этого типа, то на сервер передастся сама функция или только ее адрес?
Записан
BRE
Гость
« Ответ #5 : Март 08, 2009, 19:29 »

задача - именно выполнение произвольного кода на чужой машине (понимаю, как это звучит, но не вирус я пишу, не вирус))) )
Так вот по этой причине java и появилась....

меня вот мысль посетила:

если оформить функцию как новый тип:
Код:
typedef void(*MyFunc)(int a);
писать в сокет переменную этого типа, то на сервер передастся сама функция или только ее адрес?
Ты можешь и кусок памяти с кодом функции передать, это не проблема.
Но для ее нормального выполнения на стороне сервера ей необходимо подготовить окружение (с учетом процессора для которого этот код компилировался, адреса ее работы и ..... ).
Записан
DoZENT
Гость
« Ответ #6 : Март 08, 2009, 19:46 »

Так вот по этой причине java и появилась....
java для меня не подходит - скорость выполнения критична
Ты можешь и кусок памяти с кодом функции передать, это не проблема.
Но для ее нормального выполнения на стороне сервера ей необходимо подготовить окружение (с учетом процессора для которого этот код компилировался, адреса ее работы и ..... ).
есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
Записан
BRE
Гость
« Ответ #7 : Март 08, 2009, 19:54 »

есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
Записан
DoZENT
Гость
« Ответ #8 : Март 08, 2009, 20:43 »

есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
OK. если отбросить проблему совместимости, то как все-таки реализовать задуманное?
Записан
BRE
Гость
« Ответ #9 : Март 08, 2009, 20:51 »

есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
OK. если отбросить проблему совместимости, то как все-таки реализовать задуманное?
Ты знаешь, ты с клиент/сервером пока не затевайся, попробуй сначала на одной машине выполнить функцию в контексте другого процесса. И google тебе в помощь, ибо сейчас даже затрудняюсь порекомендовать что почитать для начала.  Подмигивающий
А вообще, позиционно-независимый код (PIC), процессы, эксплоиды... ну а дальше уже само пойдет.
« Последнее редактирование: Март 08, 2009, 21:00 от BRE » Записан
DoZENT
Гость
« Ответ #10 : Март 08, 2009, 21:53 »

есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
OK. если отбросить проблему совместимости, то как все-таки реализовать задуманное?
Ты знаешь, ты с клиент/сервером пока не затевайся, попробуй сначала на одной машине выполнить функцию в контексте другого процесса. И google тебе в помощь, ибо сейчас даже затрудняюсь порекомендовать что почитать для начала.  Подмигивающий
А вообще, позиционно-независимый код (PIC), процессы, эксплоиды... ну а дальше уже само пойдет.
Спасибо, я имею об этом понятие, год назад писал программу, одна из функций которой заключалась в перехвате Win32 функций. wasm.ru перечитал весь =) я думаю, вы не поняли суть моего вопроса. Я не собираюсь встраивать функцию в контекст другого процесса/скрыто исполнять программный код или что-то подобное. Вот как вы из dll вызываете функцию? Вы же не заморачиваетесь, под какую архитектуру процессора эта dll. Вы просто вызываете ее. Суть моего вопроса: можно ли функцию передать на сервер как некоторую переменную и там исполнить ее?
Записан
BRE
Гость
« Ответ #11 : Март 08, 2009, 22:21 »

Вот как вы из dll вызываете функцию? Вы же не заморачиваетесь, под какую архитектуру процессора эта dll. Вы просто вызываете ее. Суть моего вопроса: можно ли функцию передать на сервер как некоторую переменную и там исполнить ее?
Конечно вы не заморачиваетесь, за вас заморачивается операционная система. Она загружает dll в память процесса, настраивает адреса ее функций, что бы программа могла их вызывать и т.д.  Подмигивающий

Напиши необходимую функцию, дизассемблируй ее и посмотри какие функции она вызывает, по каким адресам и скажи как ты сможешь на сервере обеспечишь, что-бы по этим адресам находились необходимые функции?
Qt активно сохраняет свои состояния в статических структурах, как ты будешь настраивать их на стороне сервера?
Записан
drsm
Гость
« Ответ #12 : Март 09, 2009, 00:14 »

Привет всем! Передо мной встала несколько необычная проблема: мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) от клиента серверу и выполнить его на сервере. Куда копать и вообще возможно ли это? Заранее спасибо.
копай в сторону виртуальных машин и байткода.
это имхо единственный реальный вариант сделать то, что ты хочешь.

а "из длл" передать функцию по сети, это не получится. Улыбающийся
Записан
fuCtor
Гость
« Ответ #13 : Март 09, 2009, 09:48 »

А если посмотреть в сторону RPC, или тех же скриптов, которые поддерживает Qt, Может и это подойдет для решения задачи.
Записан
DoZENT
Гость
« Ответ #14 : Март 09, 2009, 12:08 »

понятно, спасибо всем! буду копировать dll на сервер.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 20.