我最近開始學習從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反彙編程序,它可以使輸出再次組裝。 –