我在Windows上复制一个函数的机器代码。
例如:
void func()
{
printf("hello");
}
在上面的例子中,我会复制func()
的十六进制代码段数据和printf()
的十六进制代码数据以及其他依赖项和数据,并将它重新链接到运行linux的不同机器上,是吗?如果正确重新链接,可以在linux机器上运行代码吗?
如果是这样,会出现许可问题吗? (这是合法的吗?)
P.S。问题涉及分布式系统问题。
答案 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实现,因为在所有库函数工作之后,对控制台的低级写入是非常不同的。