混淆了64位寄存器-ASM

问题描述 投票:0回答:1

我目前正在学习汇编,我正在使用nasm在64位ubuntu上使用Intel语法。

因此,我找到了两个引用系统调用号的网站:

此为32位寄存器(eax,ebx等):https://syscalls.kernelgrok.com

此64位寄存器(rax,rbx等):https://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64

事实是,当我使用64位syscall编号时,我的代码不起作用,但是当我用'r'替换32位寄存器中的'e'时,它起作用了,例如在sys_write中,使用rbx来存储fd而不是rdi,它可以工作。

我现在很迷路。此代码无效:

message db 'Hello, World', 10

section .text
global _start
_start: mov rax,4
        mov rdi, 1
        mov rsi, message
        mov rdx, 13
        syscall
        mov rax, 1
        mov rdi, 0
        syscall
linux assembly x86-64 nasm system-calls
1个回答
0
投票

运行strace ./my_program-进行伪造的stat系统调用,然后进行write调用,然后成功结束,然后退出段并进行段错误。不是注册名称是您的问题,而是电话号码。您正在使用32位电话号码。

© www.soinside.com 2019 - 2024. All rights reserved.