小编the*_*ang的帖子

从 64 位 nasm 代码接收 32 位寄存器

我正在学习 64 位 nasm,我通过执行以下操作来汇编 .nasm 文件,该文件仅包含 64 位寄存器

nasm -f elf64 HelloWorld.nasm -o HelloWorld.o
Run Code Online (Sandbox Code Playgroud)

并链接它执行以下操作

ld HelloWorld.o -o HelloWorld
Run Code Online (Sandbox Code Playgroud)

程序运行正确,甚至在我运行命令时说它是 64 位 ELF file,但是当我使用objdumpgdb反汇编可执行文件时,我在代码中作为 64 位寄存器放置的寄存器在以下情况下显示为 32 位寄存器:已拆卸。(示例:rax在源代码中显示为eax反汇编时的样子)

为什么是这样?

这种情况不仅仅发生在一台计算机上,而且这是一个新问题,以前没有这样做过。

你好世界.nasm:

global _start

section .text

_start:
        mov rax, 1
        mov rdi, 1
        mov rsi, hello_world
        mov rdx, length
        syscall

        mov rax, 60
        mov rdi, 11
        syscall

section .data

        hello_world: db 'Hello World',0xa
        length: equ $-hello_world
Run Code Online (Sandbox Code Playgroud)

拆解后的HelloWorld:

...
00000000004000b0 <_start>:
  4000b0:       b8 …
Run Code Online (Sandbox Code Playgroud)

assembly x86-64 nasm cpu-registers

5
推荐指数
1
解决办法
1332
查看次数

标签 统计

assembly ×1

cpu-registers ×1

nasm ×1

x86-64 ×1