x86_64汇编程序:为什么SYS_read更改<r11>和<rcx>寄存器?

时间:2018-03-19 16:42:20

标签: assembly x86-64 cpu-registers calling-convention yasm

我在x86_64汇编程序yasm上编写了一个程序,它从控制台输入中读取一个字符串,突然意识到在这些行之后:

mov     rax, SYS_read
mov     rdi, STDIN
lea     rsi, byte [char] 
mov     rdx, 1
syscall

r11rcx寄存器的值已更改。 r11寄存器不是参数寄存器(根据调用约定)。那为什么呢?

最小示例代码

section .data
SYS_read         equ 0
SYS_exit         equ 60
SUCCESS_EXIT     equ 0
STDIN            equ 0

section .bss
char:            resb 1

section .text
global _start
_start:
    xor    r11, r11
    xor    rcx, rcx

    mov    rax, SYS_read
    mov    rdi, STDIN
    lea    rsi, byte [char]
    mov    rdx, 1
    syscall

end:
    mov    rax, SYS_exit
    mov    rdi, SUCCESS_EXIT
    syscall

end标签r11rcx具有以下值(gdb会话)之前:

 rcx            0x4000d5    4194517
 r11            0x246   582

0 个答案:

没有答案