В некоторых случаях это можно сделать. Например, частью процесса сборки Emacs является загрузка всех библиотек Lisp, а затем выгрузка образа памяти на диск для быстрой загрузки. Некоторые другие языковые интерпретаторы тоже делают это (в основном я имею в виду реализацию Lisp и Scheme). Тем не менее, они специально разработаны для такого использования, поэтому я не знаю, что они должны делать, чтобы это работало.
Я думаю, что это было бы очень трудно сделать для случайной программы, но если вы написали структуру, в которой все объекты поддерживали сериализацию / десериализацию, вы можете затем сериализовать все объекты, используемые вашей программой, а затем отправить их в другое место и десериализовать их на другом конце.
Ответы других людей о виртуализации тоже на месте.