我最近开始学习从Windows移植到Linux。我一直在翻译从英特尔语法的程序到AT & T语法也将它从x32转换为x64。而且,由于我足够新的汇编程序,尤其是在移植时遇到了一些麻烦。只需提及:我故意不使用.intel_syntax
指令。从Windows移植到Linux。汇编器命令翻译
所以我就用stucked翻译这些命令:
RTLWriteIntegerBuffer: TIMES 3 DB 0x90,0x8D,0x40,0x00
依次为:
LEA EDI,[OFFSET RTLWriteIntegerBuffer+ECX-1]
还有一句:
LEA EBX,[EDX+'0']
还有一个:
ReadCharInited: DB 0
CMP BYTE PTR ReadCharInited,0
另一个问题是:AT & T语法与Intel语法之间是否存在1:1映射?或者是否存在AT & T不支持的特定英特尔命令?
也许有人知道这样的功能:
HEAP_NO_SERIALIZE=1
HEAP_GENERATE_EXCEPTIONS=4
HEAP_ZERO_MEMORY=8
...
INVOKE HeapAlloc,EAX,HEAP_GENERATE_EXCEPTIONS+HEAP_ZERO_MEMORY+HEAP_CREATE_ALIGN_16,4194332
这是一个很可能是Borland的Turbo汇编程序特定的方式来调用kernel32.dll
的HeapAlloc
,但我不知道。 是否可以翻译成fallocate
系统调用?
在此先感谢
您可以使用'.rept'或输入它来代替'times'。对于其他人阅读有关at&t内存参考语法。 'fallocate'与'HeapAlloc'完全不同。 – Jester
你真的需要AT&T语法吗?将气体的'.intel_syntax noprefix'(与MASM非常相似)还是NASM语法不会更容易?那么你只需要改变系统调用/ ABI,而不是每个指令。 (请参阅http://stackoverflow.com/tags/x86/info以获取汇编程序手册的链接) –
手动设置错误非常容易,因此我建议使用MASM进行汇编,然后使用'objdump -drwC'进行反汇编,然后移植指令和意见反汇编。我认为objdump可以选择更接近为汇编程序输入做好准备,或者使用Agner Fog的objconv反汇编程序,它可以使输出再次组装。 –