Как выполнить машинный язык из памяти? - PullRequest
1 голос
/ 20 мая 2010

Я написал программу для компиляции простой текстовой программы в скомпилированный исполняемый файл ... Возможно ли, что я могу загрузить исполняемый файл в память, каким-то образом указывать счетчик ПК на пространство памяти по желанию?

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

http://spiceycurry.blogspot.com/2010/05/simple-compilable-programming-language.html

Ответы [ 3 ]

1 голос
/ 20 мая 2010

Соберите его в общую библиотеку, которая предназначена для динамической загрузки. Я уверен, что вам нужно много заголовков и множество соглашений о вызовах в стиле C, которым вы должны подчиняться.

Я рекомендую вам написать расширение на C, попробовать связать его, и, когда это сработает, получить весь ассемблер компоновки из фазы генерации кода компилятора C.

1 голос
/ 20 мая 2010

Это исполняемый файл в памяти (например, ELF или что-то в этом роде)? или просто исполняемый код в памяти?
Если это исполняемый код в памяти, вы можете jmp там, если содержащаяся память является исполняемой, и выполнение будет продолжаться оттуда.

Если это исполняемый файл, вам нужно фактически прочитать и интерпретировать поля формата для загрузки, ссылки и т. Д., Поскольку исполняемый файл содержит статическую память, которую необходимо инициализировать, динамические библиотеки, которые необходимо связать, и запись точка, которую нужно прочитать из заголовка файла.

0 голосов
/ 20 мая 2010

Теоретически вы можете просто загрузить код в память по определенному адресу и запустить JMP для его точки входа.Если вы работаете в Python, вам, вероятно, понадобится сделать это в модуле расширения, написанном на C.

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

Кроме того, я даже не могу выразить, насколько небезопасной будет эта система, если вы не примете строгие меры предосторожности.Риски увеличиваются в разы, если вы публикуете их в общедоступной сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...