Вызов символов equ'd в GAS

Вот небольшая программа NASM:

        [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

Как видите, дизассемблированный код немного отличается. Код для call в NASM:

0:  e8 3b 00 f0 ff          callq  0xfffffffffff00040

против ГАЗ:

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

person dharmatech    schedule 27.07.2011    source источник
comment
возможный дубликат NASM to GAS: вызов символов equ'd   -  person ughoavgfhw    schedule 27.07.2011


Ответы (1)


Добавьте «.org 0x0000000000200000» в файл GAS.

person Fabel    schedule 17.10.2011