assembly - 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
解决方案
推荐阅读
- typescript - 如何在我的 Typescript 代码中导入 CheckboxChangeEvent
- c# - .Net 5,Appsettings.json 在 Program.cs 中不可用?
- ios - 将项目水平附加到 tableView 单元格中,但不会填满所有空间
- python - 返回按数组字典中的值排序的键
- angular - 角度编译错误组件中的预期参数
- python - 预处理文本并排除表单脚注、额外空格和
- node.js - Linux 上的 Node 认为它已经过时了
- excel - VBA在初始化时未将单元格值读入文本框
- c - 函数指针变量函数调用触发另一个函数。可能在 C 中
- pandas - 如何从列中删除部分文本?