【问题标题】:Calling equ'd symbols in GAS在 GAS 中调用 equ'd 符号
【发布时间】:2011-10-13 21:23:43
【问题描述】:

这是一个小型 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

这是一个 GAS 版本:

        .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

【问题讨论】:

标签: assembly nasm gnu-assembler


【解决方案1】:

将“.org 0x0000000000200000”添加到 GAS 文件中。

【讨论】:

    猜你喜欢
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多