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