Перейти к содержимому
  • 0
SergOmarov

Передача функций

Вопрос

Есть 2 компьютера,  одного есть в оперативной памяти функция, как ее передать другому?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

передать код, и загрузить его на другом компьютере.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если я не знаю, где код? У меня есть только функция в оперативной памяти.


Мой вопрос был о том, как из оперативной памяти эту функцию извлечь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

--функция
function hello()
print("Hello World!")
end
-- преобразуем функцию в строку
str=string.dump(hello)
-- передаем на другой компьютер
...
-- восстанавливаем
hello1=loadstring(str)
-- и запускаем
hello1()

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если я не знаю, где код? ...

 

Зеро, похоже, тут проблема более грандиозная :) Нужно что-то из компа передать, что-то из ОЗУ, но что именно, но не знает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А если код не знаешь нужно его написать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На ум сразу приходят пару идей:

 

Сделать менеджер оперативной памяти и грузить программы через него, как через lua.lua

Если известно имя функции, то string.dump

Парсить всю память по рабочим индексам, если ~= nil, то занести в таблицу, но как найти нужный код я без понятия и как сразу дампить все окружения тоже.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
 

 

--функция
function hello()
print("Hello World!")
end
-- преобразуем функцию в строку
str=string.dump(hello)
-- передаем на другой компьютер
...
-- восстанавливаем
hello1=loadstring(str)
-- и запускаем
hello1()

 

Очень хороший пример, спасибо)

 

На ум сразу приходят пару идей:

 

Сделать менеджер оперативной памяти и грузить программы через него, как через lua.lua

Если известно имя функции, то string.dump

Парсить всю память по рабочим индексам, если ~= nil, то занести в таблицу, но как найти нужный код я без понятия и как сразу дампить все окружения тоже.

Дуб, а в OC можно напрямую взаимодействовать с оперативной памятью? Можно пример?

Или ты имел ввиду

for i,G_.итератор() do G_.variables:insert(i) end 

 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть 2 компьютера,  одного есть в оперативной памяти функция, как ее передать другому?

Неясный вопрос.

Ты хочешь извлечь байткод функции из окружения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Неясный вопрос.

Ты хочешь извлечь байткод функции из окружения?

Только не байт-код. Байт-код в компилируемых языках, а у нас луа — интерпретируемый. (Хотя компилировался-бы, через LuaJIT)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только не байт-код. Байт-код в компилируемых языках, а у нас луа — интерпретируемый. (Хотя компилировался-бы, через LuaJIT)

Вообще-то в памяти уже висит именно байт-код, достаточно посмотреть дамп тех индексов, в которые загружается код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Много базара, мало кода.

Как в lua получать указатели, если можно так сказать? Как работать с памятью через указатели?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Через Cи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А у нас тут код на си и загрузка бинарных исполняемых файлов разрешена?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Только не байт-код. Байт-код в компилируемых языках, а у нас луа — интерпретируемый. (Хотя компилировался-бы, через LuaJIT)

Опять 25 )

load() на выходе дает скомпилированный чанк в форме байт-кода, а уже байт-код интерпретируется луа машиной. Луа интерпретирует скомпилированный байт-код программы а не текст!!!!111адинадин

 

Много базара, мало кода.

Как в lua получать указатели, если можно так сказать? Как работать с памятью через указатели?

Никак.

 

Даже загрузка байткода, полученного извне, изначально отключен по соображениям безопасности.

 

Если очень хочется, то можно load с помощью которой все компилится, заключить в конверт с нужным функционалом. Но это имитация. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Блин, а тут ТАКАЯ ИДЕЯ БЫЛА! Взять байт-код всех методов КБ и записать их в файл, как либу:D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

LeshaInc, lua-код транслируется в псевдо-байткод что бы виртуальная машина не занималась лищними действиями, то есть не парсила,и не анализировала строки, виртуальная машина копирует устройство озу, вместо имени функции адреса, короче ассемблер.

Просто идёт превращение нам понятного языка, в инструкции последовательные.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

load() в моде не грузит байт-код, поэтому для перехвата кода надо сделать надстройку к операционной системе, которая будет запускаемые файлы прогонять через себя. Как я понял, это нужно для параллельных вычислений, но это тупиковый путь, для ускорения лучше выполнять код на внешних ресурсах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А из результата string.dump никак не получить объект?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...