Russian Qt Forum
Ноябрь 23, 2024, 01:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
Переслать код от клиента серверу
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Переслать код от клиента серверу (Прочитано 10204 раз)
DoZENT
Гость
Переслать код от клиента серверу
«
:
Март 07, 2009, 19:42 »
Привет всем! Передо мной встала несколько необычная проблема: мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) от клиента серверу и выполнить его на сервере. Куда копать и вообще возможно ли это? Заранее спасибо.
Записан
BRE
Гость
Re: Переслать код от клиента серверу
«
Ответ #1 :
Март 07, 2009, 19:49 »
Цитата: DoZENT от Март 07, 2009, 19:42
мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов)
Что здесь имеется ввиду?
Записан
DoZENT
Гость
Re: Переслать код от клиента серверу
«
Ответ #2 :
Март 07, 2009, 20:09 »
Цитата: BRE от Март 07, 2009, 19:49
Цитата: DoZENT от Март 07, 2009, 19:42
мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов)
Что здесь имеется ввиду?
Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер?
Записан
BRE
Гость
Re: Переслать код от клиента серверу
«
Ответ #3 :
Март 07, 2009, 20:15 »
Цитата: DoZENT от Март 07, 2009, 20:09
Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер?
Бинарный код?
В принципе это конечно возможно - смотри эксплоиды.
Только нужно понимать, что на свете есть много процессоров разных архитектур, которые работают под управлением огромного числа операционных систем и т.д. и т.п.
Ты лучше задачу свою расскажи.
Что за клиент, что за сервер.
Записан
DoZENT
Гость
Re: Переслать код от клиента серверу
«
Ответ #4 :
Март 08, 2009, 19:20 »
Цитата: BRE от Март 07, 2009, 20:15
Цитата: DoZENT от Март 07, 2009, 20:09
Допустим, на машине-клиенте есть dll. Задача - выполнить одну из функций этой dll на машине-сервере. Можно ли как-то это сделать, не копирую эту dll на сервер?
Бинарный код?
В принципе это конечно возможно - смотри эксплоиды.
Только нужно понимать, что на свете есть много процессоров разных архитектур, которые работают под управлением огромного числа операционных систем и т.д. и т.п.
Ты лучше задачу свою расскажи.
Что за клиент, что за сервер.
задача - именно выполнение произвольного кода на чужой машине (понимаю, как это звучит, но не вирус я пишу, не вирус))) ) меня вот мысль посетила:
если оформить функцию как новый тип:
Код:
typedef void(*MyFunc)(int a);
писать в сокет переменную этого типа, то на сервер передастся сама функция или только ее адрес?
Записан
BRE
Гость
Re: Переслать код от клиента серверу
«
Ответ #5 :
Март 08, 2009, 19:29 »
Цитата: DoZENT от Март 08, 2009, 19:20
задача - именно выполнение произвольного кода на чужой машине (понимаю, как это звучит, но не вирус я пишу, не вирус))) )
Так вот по этой причине java и появилась....
Цитата: DoZENT от Март 08, 2009, 19:20
меня вот мысль посетила:
если оформить функцию как новый тип:
Код:
typedef void(*MyFunc)(int a);
писать в сокет переменную этого типа, то на сервер передастся сама функция или только ее адрес?
Ты можешь и кусок памяти с кодом функции передать, это не проблема.
Но для ее нормального выполнения на стороне сервера ей необходимо подготовить окружение (с учетом процессора для которого этот код компилировался, адреса ее работы и ..... ).
Записан
DoZENT
Гость
Re: Переслать код от клиента серверу
«
Ответ #6 :
Март 08, 2009, 19:46 »
Цитата: BRE от Март 08, 2009, 19:29
Так вот по этой причине java и появилась....
java для меня не подходит - скорость выполнения критична
Цитата: BRE от Март 08, 2009, 19:29
Ты можешь и кусок памяти с кодом функции передать, это не проблема.
Но для ее нормального выполнения на стороне сервера ей необходимо подготовить окружение (с учетом процессора для которого этот код компилировался, адреса ее работы и ..... ).
есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
Записан
BRE
Гость
Re: Переслать код от клиента серверу
«
Ответ #7 :
Март 08, 2009, 19:54 »
Цитата: DoZENT от Март 08, 2009, 19:46
есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
Записан
DoZENT
Гость
Re: Переслать код от клиента серверу
«
Ответ #8 :
Март 08, 2009, 20:43 »
Цитата: BRE от Март 08, 2009, 19:54
Цитата: DoZENT от Март 08, 2009, 19:46
есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
OK. если отбросить проблему совместимости, то как все-таки реализовать задуманное?
Записан
BRE
Гость
Re: Переслать код от клиента серверу
«
Ответ #9 :
Март 08, 2009, 20:51 »
Цитата: DoZENT от Март 08, 2009, 20:43
Цитата: BRE от Март 08, 2009, 19:54
Цитата: DoZENT от Март 08, 2009, 19:46
есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
OK. если отбросить проблему совместимости, то как все-таки реализовать задуманное?
Ты знаешь, ты с клиент/сервером пока не затевайся, попробуй сначала на одной машине выполнить функцию в контексте другого процесса. И google тебе в помощь, ибо сейчас даже затрудняюсь порекомендовать что почитать для начала.
А вообще, позиционно-независимый код (PIC), процессы, эксплоиды... ну а дальше уже само пойдет.
«
Последнее редактирование: Март 08, 2009, 21:00 от BRE
»
Записан
DoZENT
Гость
Re: Переслать код от клиента серверу
«
Ответ #10 :
Март 08, 2009, 21:53 »
Цитата: BRE от Март 08, 2009, 20:51
Цитата: DoZENT от Март 08, 2009, 20:43
Цитата: BRE от Март 08, 2009, 19:54
Цитата: DoZENT от Март 08, 2009, 19:46
есть QT функция (в DLL, написанной на QT) на стороне клиента. Есть QT сервер. Не вижу проблемы несовместимости. Поясните подробней, пожалуйста.
У тебя процессор 32bit на сервере 64bit, или вообще motorola какая нибудь, для которой твой код просто набор байт.
OK. если отбросить проблему совместимости, то как все-таки реализовать задуманное?
Ты знаешь, ты с клиент/сервером пока не затевайся, попробуй сначала на одной машине выполнить функцию в контексте другого процесса. И google тебе в помощь, ибо сейчас даже затрудняюсь порекомендовать что почитать для начала.
А вообще, позиционно-независимый код (PIC), процессы, эксплоиды... ну а дальше уже само пойдет.
Спасибо, я имею об этом понятие, год назад писал программу, одна из функций которой заключалась в перехвате Win32 функций. wasm.ru перечитал весь =) я думаю, вы не поняли суть моего вопроса. Я не собираюсь встраивать функцию в контекст другого процесса/скрыто исполнять программный код или что-то подобное. Вот как вы из dll вызываете функцию? Вы же не заморачиваетесь, под какую архитектуру процессора эта dll. Вы просто вызываете ее. Суть моего вопроса: можно ли функцию передать на сервер как некоторую переменную и там исполнить ее?
Записан
BRE
Гость
Re: Переслать код от клиента серверу
«
Ответ #11 :
Март 08, 2009, 22:21 »
Цитата: DoZENT от Март 08, 2009, 21:53
Вот как вы из dll вызываете функцию? Вы же не заморачиваетесь, под какую архитектуру процессора эта dll. Вы просто вызываете ее. Суть моего вопроса: можно ли функцию передать на сервер как некоторую переменную и там исполнить ее?
Конечно вы не заморачиваетесь, за вас заморачивается операционная система. Она загружает dll в память процесса, настраивает адреса ее функций, что бы программа могла их вызывать и т.д.
Напиши необходимую функцию, дизассемблируй ее и посмотри какие функции она вызывает, по каким адресам и скажи как ты сможешь на сервере обеспечишь, что-бы по этим адресам находились необходимые функции?
Qt активно сохраняет свои состояния в статических структурах, как ты будешь настраивать их на стороне сервера?
Записан
drsm
Гость
Re: Переслать код от клиента серверу
«
Ответ #12 :
Март 09, 2009, 00:14 »
Цитата: DoZENT от Март 07, 2009, 19:42
Привет всем! Передо мной встала несколько необычная проблема: мне необходимо переслать произвольный код (функцию с заранее неизвестным количеством аргументов) от клиента серверу и выполнить его на сервере. Куда копать и вообще возможно ли это? Заранее спасибо.
копай в сторону виртуальных машин и байткода.
это имхо единственный реальный вариант сделать то, что ты хочешь.
а "из длл" передать функцию по сети, это не получится.
Записан
fuCtor
Гость
Re: Переслать код от клиента серверу
«
Ответ #13 :
Март 09, 2009, 09:48 »
А если посмотреть в сторону RPC, или тех же скриптов, которые поддерживает Qt, Может и это подойдет для решения задачи.
Записан
DoZENT
Гость
Re: Переслать код от клиента серверу
«
Ответ #14 :
Март 09, 2009, 12:08 »
понятно, спасибо всем! буду копировать dll на сервер.
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...