首页 > 解决方案 > AT&T gcc 程序集移动 char 值以注册为 puts 的 arg

问题描述

我在 rcx 中加载字符串并移动 rcx + 8bytes 并用零填充并存储在 %r8

%r8 将包含 0x72,72 是字母“r”的 ascii。使用 movq 将 r8 的值移动到 rdi 中,使 rdi 为 0x72。但是 on call puts 我得到了 sigsev,无法访问 0x72 处的内存。为什么我不能这样做?

        .data
string:    .asciz    "Hello world!"
.global main 
.text 

main: 
    leaq   string, %rcx
    movq $4, %rax 
    movzbq 4(%rcx,%rax,1), %r8 
    movq %r8, %rdi
    call puts

标签: assemblyx86-64puts

解决方案


推荐阅读