2013-09-16 99 views
1

如何將mov [ebx], al從NASM翻譯成GAS? 我試過mov %al, (%ebx)但它確實發生了分段故障。從NASM到GAS的翻譯

另一個問題,可以說我有氣陣列.lcomm array, 50 我必須把美元符號($)在array這樣的:mov %rbx, $array還是不需要?

任何答案將是有益的:)

+0

與NASM彙編,用'objdump -d'(或['objconv'](http://www.agner.org/optimize/#objconv)反彙編得到一個你可以實際組裝的文件。 –

回答

0

先上去,mov %al, %ecx不能真正的錯,因爲它沒有訪問內存。地獄,它不應該組裝,因爲它們的大小不同。 也就是說,您的nasm代碼的正確翻譯是mov %al, (%ecx),它會將al寫入地址ecx的內存中。

對於其他問題:如果您想引用地址,則需要$。因此,mov %rbx, $array無效,因爲您無法分配給該地址。如果要將rbx存儲到陣列的第一項中,請寫mov %rbx, array。如果要加載第一個項目,請使用mov array, %rbx。如果您想加載第一個項目的地址,請執行mov $array, %rbx或使用lea,這是特殊的,不需要$

+0

不錯,謝謝。對不起,我錯過了一些東西。我試過了,它對ecx有效,但對ebx沒有幫助。我嘗試過mov%al,(%ebx)和movb%al,(%ebx),仍然會出現seg fault。 – ThisGuy

+0

這意味着'ebx'有一個無效的地址,也許你沒有加載一個地址,我只能猜測沒有看到整個代碼。此外,它應該是64位代碼,'ebx'感覺不對。 – Jester

+0

好吧,我做了類似的事情:彈出%ebx和彈出%ebx,然後彈出seg故障。有什麼不對? – ThisGuy

1

intel2gas怎麼樣?

usage: intel2gas [options] [-o outfile] [infile] 
where options include: 
    -h  this help 
    -i  convert from intel to at&t format (default) 
    -g  convert from at&t to intel format 
    -m -t  convert from masm/tasm to at&t format 
    -c  understand C style comments 
    -I  convert inline assembler (intel to at&t only) 
    -d  output all % chars as %% 
    -V  show version 
    infile and outfile default to stdin/stdout 
0

您可以使用objdump(osx上的otool)將其反彙編爲gas格式。

+0

它是英特爾語法,但是它是MASM風格,而不是NASM。例如'mov eax,symbol'是來自GAS和MASM內存的負載,但是是NASM中地址的'mov'-immediate。請參閱https://stackoverflow.com/tags/intel-syntax/info。 –

0

與NASM彙編,分解爲objdump -d以獲取任何單個指令的AT & T語法版本。

或者使用Agner Fog的objconv拆分爲.S文件,使用GAS AT & T語法,您可以直接實際組裝。 (它將標籤放在分支目標上)。但它仍然沒有真正處理轉換數據,但大部分代碼都是我想的。


BTW,氣體可以使用.intel_syntax noprefix,但它是MASM風格沒有NASM,所以mov eax, symbol是一個負載,沒有地址的mov -immediate。 (你需要mov eax, OFFSET symbol在GAS .intel_syntax)。 有關NASM和MASM之間差異的更多信息,請參閱https://stackoverflow.com/tags/intel-syntax/info


mov [ebx], almov %al, (%ebx)是相同的指令:單獨使用ebx作爲地址的al一個字節的存儲。如果這種隔斷,那麼單獨的指示不是問題。其他說明都是錯誤的,或者您有其他問題。也許你將GAS代碼組裝成64位? Assembling 32-bit binaries on a 64-bit system (GNU toolchain)