Чтобы сделать то, что вы описали в Windows, потребуется дублирование функциональности PE Loader.
В Windows обычно происходит следующее:
call [some_API_addr] ; uses in-program data
в разделе RDATA PE:
some_API_addr: dd 0 ; filled in by the Loader with the address in the DLL
Вы не можете просто скопировать текст и RDATA, потому чтоБиблиотеки DLL могут быть загружены в разных местах благодаря ASLR (рандомизации разметки адресного пространства), который призван предотвратить то, что вы пытаетесь сделать:
Предполагая, что у вас был хороший способ идентифицировать все данные, которые нужны вашей функции (что может быть непросто), вы можете избежать этой проблемы с DLL, перейдя непосредственно к интерфейсу «syscall» Windows.
Например, см .: http://www.nynaeve.net/?p=48 и http://www.symantec.com/connect/articles/windows-syscall-shellcode будут служить отправными точками,Обратите внимание на предостережения во второй статье, что интерфейс системных вызовов изменяется между версиями ОС!Предполагая, что ваша распределенная система похожа, у вас все будет в порядке.
Типичное решение проблемы упаковки кода для удаленного выполнения - поместить код в DLL.
Затем, когда DLL загруженана каждой машине (например, LoadLibrary) загрузчик PE установит правильные адреса.