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

时间:2011-09-03 23:12:45

标签: c++ windows linux dependencies hex

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

例如:

void func()
{
    printf("hello");
}

在上面的例子中,我会复制func()的十六进制代码段数据和printf()的十六进制代码数据以及其他依赖项和数据,并将它重新链接到运行linux的不同机器上,是吗?如果正确重新链接,可以在linux机器上运行代码吗?

如果是这样,会出现许可问题吗? (这是合法的吗?)

P.S。问题涉及分布式系统问题。

2 个答案:

答案 0 :(得分:6)

有一个wine program (and project)不是模拟器。它将从Windows获取exe文件并直接在linux中运行它。最常用的WinAPI将被翻译成linux和X11图形系统。

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

答案 1 :(得分:1)

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

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