gpt4 book ai didi

assembly - 如何使用 GNU GAS 汇编器生成像 nasm -f bin 这样的普通二进制文件?

转载 作者:行者123 更新时间:2023-12-03 11:56:33 24 4
gpt4 key购买 nike

我有一些 NASM 文件,它们通常具有以下结构:

        [BITS 64]
[ORG 0x0000000000200000]

start:
...

ret

我正在像这样组装它们:
nasm -f bin abc.asm

我想用 GAS 来写其中的一些。两个问题:
  • 我应该在 GAS 中使用哪些指令?我找到了“.org”指令,但 GAS 似乎没有“.bits”指令。
  • 我应该传递什么给gccas生成一个普通的二进制文件? IE。什么-f bin选项与 NASM 相关。
  • 最佳答案

    What directives should I use in GAS? I've found the '.org' directive but GAS doesn't seem to have a '.bits' directive.



    汇编器对我来说默认为 64-bit,你可以使用 --32--64 在命令行上进行选择。查看 as 的手册,了解如何在需要时更改代码内部的架构(例如, .code16 可用于为引导加载程序生成实模式代码)。

    您很可能不想使用 .org 指令来指定代码所在的位置,但可能想要使用链接脚本或指定在命令行上加载文本和数据段的位置。 ( org 0x0000000000200000 产生一个 2+ MB 的二进制文件)。

    What should I pass to gcc or as to generate a plain binary file? I.e. what the -f bin option does with NASM.


    $ cat test.S
    .section .text
    .globl _start
    _start:
    xor %rax, %rax
    mov test, %rax
    ret

    test: .quad 0x1234567812345678


    $ as --64 -o test.o test.S
    $ ld -Ttext 200000 --oformat binary -o test.bin test.o
    $ objdump -D -b binary -m i386:x86-64 test.bin
    test.bin: file format binary
    Disassembly of section .data:



    0000000000000000 <.data>:
    0: 48 31 c0 xor %rax,%rax
    3: 48 8b 04 25 0c 00 20 mov 0x20000c,%rax
    a: 00
    b: c3 retq

    c: 78 56 js 0x64
    e: 34 12 xor $0x12,%al
    10: 78 56 js 0x68
    12: 34 12 xor $0x12,%al

    关于assembly - 如何使用 GNU GAS 汇编器生成像 nasm -f bin 这样的普通二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828631/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com