你能在linux中编译/运行masm吗?

时间:2016-06-29 15:54:38

标签: python assembly nasm masm

听起来像一个愚蠢的问题,但我不知道如何问它:我正在尝试创建一个python库来测试CPUID代码并返回一个结果,这恰好适用于两个linux和窗户。能够有效地执行CPUID的唯一方法是在汇编程序中对其进行编程,因此,有了这样的方法,可以通过它来测试在独立于OS的机器上运行的程序的成功或失败,并将其构建为python extensible library或者更确切地说,构建一个独立于操作系统的python库的手段?

Python文档不清楚这将如何/将如何工作。我是否需要制作两个库,一个窗口和一个linux(我只是为了效率而尝试一个)?

1 个答案:

答案 0 :(得分:5)

由于我没有让代表发表评论,我不得不回答。

你不能拥有一个(动态)图书馆来统治他们的原因"是因为,Windows和Linux认为动态lib文件(.dll' s,.so' s)是可执行格式。 Windows动态库具有PE头,Linux无法执行,反之亦然,Linux共享库必须具有Windows无法执行的ELF头。如果您的代码是100%独立于平台,则无关紧要。

对于静态库,应该可以制作一个可由Windows和Linux翻译的库。如果做不到这一点,你可以独立组装平台" lib"使用COFF或BIN等通用格式,并将其链接到您当前使用的平台上。甚至可能使用某种形式的运行时链接。

对不起,我使用了答案部分,没有提供具体细节。但是如果你只是想制作一个静态的lib,它将在你的代码中内联在Linux和Windows上,那么它应该是可能的。

编辑: 经过一些研究后我发现,不可能使用MASM来组装平面二进制文件。显然,制作一个EULA是违反EULA的?无论先前使用通用格式描述的过程如何,都不能与MASM一起使用,因为它产生PE / COFF作为"最低级别"目标文件。

所以解决方案可能是; 1)将你的程序集移植到像NASM(netwide汇编程序)那样的东西,它可以产生扁平的二进制文件。

2)使用QuasarDonkey非常复杂的方法剥离PE标头以提取平面二进制文件:https://stackoverflow.com/a/26877436/6509761

无论你如何获得平面二进制文件,你都必须这样做;

在Linux上:将平面二进制文件链接为ELF可执行文件,应该非常简单。

  

FLAT BINARY - > ELF EXECUTABLE

在Windows上:将PE / COFF标头添加到平面二进制文件,并将其链接到.exe / .dll文件。几乎在解锁时,微软就拥有了这个过程。我无法找到有关如何执行此操作的任何示例。但理论上,这个过程看起来像这样。

  

FLAT BINARY - > PE / COFF - > WINDOWS EXECUTABLE

QuasarDonkey的方法可能是确定的选项(这就是我加入它的原因),但我永远不会推荐它。

真的,唯一直接的选择是为Windows编译一个库,为Linux编译一个库,使用MASMs PE / COFF格式作为基础是不切实际的:)