C++ 重新链接十六进制代码并在另一台机器上运行

C++ 重新链接十六进制代码并在另一台机器上运行,c++,linker,hex,distributed,C++,Linker,Hex,Distributed,如果我能在一台机器上得到一个函数的十六进制代码 我如何重新链接它并在另一台机器上执行 即, 如果我从反汇编程序得到函数的十六进制代码 这个函数叫做windows API void newfunc() { call some_API; } 对于在另一台机器上运行,我必须重新链接它以调用该机器的API地址。 假设机器以相同的硬件架构运行windows p、 关于分布式系统编程 更多说明: 因此,我有newfunc()的十六进制代码,其中包括对机器A中某些_API的调用程序集。。。我想在一个类

如果我能在一台机器上得到一个函数的十六进制代码 我如何重新链接它并在另一台机器上执行 即, 如果我从反汇编程序得到函数的十六进制代码 这个函数叫做windows API

void newfunc()
{
   call some_API;
}
对于在另一台机器上运行,我必须重新链接它以调用该机器的API地址。 假设机器以相同的硬件架构运行windows

p、 关于分布式系统编程

更多说明: 因此,我有newfunc()的十六进制代码,其中包括对机器A中某些_API的调用程序集。。。我想在一个类似的架构和操作系统上运行这个十六进制,但是在另一台机器上运行 因此,我必须重新链接它,以便对某个API的调用进入目标机器B的某个API…我该怎么做?
thnx预先

要执行Windows下所述的操作,需要复制PE加载程序功能

在Windows下,通常发生的情况是:

call [some_API_addr]    ; uses in-program data
在PE的RDATA部分:

 some_API_addr:   dd  0     ; filled in by the Loader with the address in the DLL 
您不能只复制文本和RDATA,因为由于ASLR(地址空间布局随机化)的作用,DLL可以加载到不同的位置,其目的是防止您尝试执行以下操作:

假设您有一个很好的方法来识别函数所需的所有数据(这可能不容易),您可以通过直接转到Windows“syscall”界面来避免此DLL问题。
例如,请参见:并将作为起点。请注意第二篇文章中的注意事项,系统调用接口在操作系统版本之间会发生变化!假设您的分布式系统是类似的,您将很好

打包代码以供远程执行的典型解决方案是将代码放入DLL中。

然后,当DLL加载到每台机器上(例如LoadLibrary)时,PE加载程序将修复正确的地址

“机器API地址”。。。你指的是IP地址吗?你想让机器A在机器B上调用
一些API
?不,我想在机器B上运行十六进制代码和函数newfunc()你问了一个非常类似的问题:这个问题在那个问题中得到了回答。你的场景要求你做这样一件奇怪的事情是什么?只需编写一个包含要在机器B上运行的函数的程序,对其进行编译,然后将其复制到机器B并运行即可。