2011-07-27 90 views
1

這裏有一個小NASM程序:撥打GAS equ'd符號

 [BITS 64] 
     [ORG 0x0000000000200000] 

     b_print_newline equ 0x0000000000100040 

start: 
     call b_print_newline 

     ret 

組裝起來:

$ nasm -f bin pr-nl-a.asm -o pr-nl-a.app 

拆解:

$ objdump -D -b binary -m i386:x86-64 pr-nl-a.app 
pr-nl-a.app:  file format binary 


Disassembly of section .data: 

0000000000000000 <.data>: 
    0: e8 3b 00 f0 ff   callq 0xfffffffffff00040 
    5: c3      retq 

這裏的氣體版本:

 .set b_print_newline , 0x0000000000100040 

     .text 

     .global _start 

_start: 

     call b_print_newline 

     ret 

組裝,並將其鏈接:

$ as -o pr-nl-b.o pr-nl-b.s 
$ ld -Ttext 200000 --oformat binary -o pr-nl-b.app pr-nl-b.o 

拆解:

$ objdump -D -b binary -m i386:x86-64 pr-nl-b.app 
pr-nl-b.app:  file format binary 


Disassembly of section .data: 

0000000000000000 <.data>: 
    0: ff 14 25 40 00 10 00 callq *0x100040 
    7: c3      retq 

正如你所看到的,反彙編代碼略有不同。在NASM的call代碼:

0: e8 3b 00 f0 ff   callq 0xfffffffffff00040 

VS氣:

0: ff 14 25 40 00 10 00 callq *0x100040 

對如何正確實施GAS版本有什麼建議?

這裏的程序FASM:

 b_print_newline equ 0x0000000000100040 

     use64 
     org 0x0000000000200000 

start: call b_print_newline 
     ret 

它做正確的事:

$ objdump -D -b binary -m i386:x86-64 pr-nl-c.app 

pr-nl-c.app:  file format binary 


Disassembly of section .data: 

0000000000000000 <.data>: 
    0: e8 3b 00 f0 ff   callq 0xfffffffffff00040 
    5: c3      retq 
+1

的可能重複的[NASM到GAS:調用equ'd符號](http://stackoverflow.com/questions/6830427/nasm-to-gas-calling-equd-symbols) – ughoavgfhw

回答

0

添加」 .ORG 0x0000000000200000" 的GAS文件。