Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从windows可执行文件复制机器代码并在linux上运行_C++_Windows_Linux_Dependencies_Hex - Fatal编程技术网

C++ 从windows可执行文件复制机器代码并在linux上运行

C++ 从windows可执行文件复制机器代码并在linux上运行,c++,windows,linux,dependencies,hex,C++,Windows,Linux,Dependencies,Hex,我在Windows上复制函数的机器代码 例如: void func() { printf("hello"); } 在上述情况下,我将复制func()的十六进制代码段数据和printf()的十六进制代码数据以及其他依赖项和数据,并将其重新链接到运行linux的不同机器上,如果重新链接正确,是否可以在linux机器上运行代码 如果是的话,会不会有许可证问题?(合法吗?) 问题涉及分布式系统问题。这是一个相当模糊/无法回答的问题,但如果不是不可能的话,这将是极其困难的。你有许多困难需要解决。

我在Windows上复制函数的机器代码

例如:

void func()
{
    printf("hello");
}
在上述情况下,我将复制
func()
的十六进制代码段数据和
printf()
的十六进制代码数据以及其他依赖项和数据,并将其重新链接到运行linux的不同机器上,如果重新链接正确,是否可以在linux机器上运行代码

如果是的话,会不会有许可证问题?(合法吗?)


问题涉及分布式系统问题。

这是一个相当模糊/无法回答的问题,但如果不是不可能的话,这将是极其困难的。你有许多困难需要解决。即,可执行文件格式(Linux上为ELF,windows上为PE),系统/编译器之间的调用约定,等等


我能想到的最大的问题是,Linux和Windows之间的文件处理非常不同。您最好的选择不是复制printf(),而是将该调用重定向到windows实现,因为在所有库函数工作之后,对控制台的低级写入是非常不同的。

这是一个非常模糊/无法回答的问题,但这即使不是不可能的,也是极其困难的。你有许多困难需要解决。即,可执行文件格式(Linux上为ELF,windows上为PE),系统/编译器之间的调用约定,等等

我能想到的最大的问题是,Linux和Windows之间的文件处理非常不同。最好的办法不是复制printf(),而是将该调用重定向到windows实现,因为在所有库函数工作之后,对控制台的低级写入非常不同。

存在一个不是仿真器的。它将从windows获取exe文件并直接在linux中运行。大多数使用的WinAPI将被转换为linux和X11图形系统

如果您只想在linux下从windows运行exe文件,这将是答案。如果你想知道如何做到这一点,你可以阅读葡萄酒的来源和/或葡萄酒和/或其设计的文档。或者询问邮件列表中葡萄酒的作者。

有一种不是仿真器的。它将从windows获取exe文件并直接在linux中运行。大多数使用的WinAPI将被转换为linux和X11图形系统


如果您只想在linux下从windows运行exe文件,这将是答案。如果你想知道如何做到这一点,你可以阅读葡萄酒的来源和/或葡萄酒和/或其设计的文档。或者问问邮件列表中葡萄酒的作者。

可能不会。触摸操作系统API调用的那一刻(例如,输出到屏幕,除非C编译器使用BIOS或直接硬件写入,否则这将不起作用。这个问题无法回答…处理器体系结构如何?具体指的是什么功能(因为授权是逐案评估)?您的目标是什么???如果是windows,最有可能的cpu是x86或x86-64,可能不是。当您触摸操作系统API调用时(例如,要输出到屏幕,除非C编译器使用BIOS或直接硬件写入,否则这将不起作用。这个问题无法回答…处理器体系结构如何?具体指什么功能(因为许可是逐案评估)?你的目标是什么???如果是windows,最有可能的cpu是x86或x86-64。这很难,但这是真的。有一个Wine和一个CrossOver Office,可以在Linux上运行windows的PE。反过来也很有可能。我正在开发一个3D引擎,90%的代码与操作系统无关。因此,如果你编译作为引擎框架内的一个模块,根据特定的CPU架构,生成的机器代码对于每个操作系统都是相同的。因此,我继续编写了一个跨平台ELF加载程序/链接器。这样,我只需要编译一次与操作系统无关的部分。这也意味着,因为引擎的操作系统接口部分是目标应用程序independent,该游戏引擎的应用程序将在引擎支持的任何操作系统上运行。thnx jonathan…以及其他帮助…但是假设它是windows机器而不是linux机器,那么可以使用windows机器的printf和其他文件功能…但是我如何重新链接十六进制代码以在t上正确执行另一台机器…例如,调用c函数printf可能会指向不同的网络内存位置。这很困难,但它是真实的。有一个Wine和一个CrossOver Office,它们能够在Linux上运行windows的PE。反过来也很有可能。我正在开发一个3D引擎,90%的代码与操作系统无关因此,如果在引擎框架内编译这样一个模块,那么在给定特定CPU架构的情况下,每个操作系统的机器代码都是相同的。因此,我继续编写了一个跨平台ELF加载程序/链接器。这样,我只需编译一次与操作系统无关的部分。这也意味着,由于引擎的操作系统接口部分e独立于目标应用程序,该游戏引擎的应用程序将运行在引擎支持的任何操作系统上。thnx jonathan…和其他帮助…但是假设它是windows机器而不是linux机器,那么可以使用windows机器的printf和其他文件功能…但是我如何重新链接十六进制代码要在另一台机器上正确执行…即,对c函数printf的调用现在可能指向不同的内存位置