linux - NASM 中的增量循环
问题描述
我在尝试让这个汇编代码工作时遇到了麻烦:
section .text
global _start
_start:
loop:
mov rax, 4
mov rdi, 1
add rsi, 1
mov rdx, 1
syscall
cmp rsi,11
jne loop
exit:
mov rax,60
xor rdi,rdi
syscall
这段代码的目的是增加rsi寄存器中的值并将其值打印 10 次。它是在 Linux x86_64 机器上用 NASM 编写的。
解决方案
您的答案有很多问题,首先是系统调用号。您将值4
放入 rax 但对于 x86_64 linux,sys_write 的值是1
http://blog.rchapman.org/posts/Linux_System_Call_Table_for_x86_64/
其次,您的论点有问题,对 sys_write 的调用如下,sys_write(unsigned int fd, const char *buf, size_t count)
, where rdi
is fd
,rsi
is buf
,rdx
is count
。您的电话的问题是您将 rsi 作为文字值1
,这使得 linux 去地址0x1
寻找要打印的东西,这显然是无效的。
考虑这个例子是打印数字“1”然后换行的有效方法
section .data
myNum: db '1', 0xA
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, myNum
mov rdx, 2
syscall
mov rax, 60
mov rdi, 0
syscall
如果您要投反对票,请解释您认为答案有什么问题,仅按投反对票按钮对任何人都没有帮助
推荐阅读
- sql-server - 如何在仅查看时防止意外查询执行
- javascript - addEventListener 在点击时添加了不正确的属性 - 仅在 320x480 上
- mysql - 按同一列计算不同
- psql - 返回 psql 中的一行
- c# - SendAsync vs SendMailAsync vs new Thread vs Parallel.ForEach 用于发送 300-500 封电子邮件
- java - @Autowired HttpServletRequest 的 SpringBoot 转发请求导致 StackOverFlow 异常
- sql - 性能 - 选择带有左连接和空值检查的查询
- python - Django:向网站添加社交身份验证
- c# - Unity Dependency 对 Web 表单中的演示者不起作用
- php - 允许 PHP 客户端 URL 库在我的浏览器中设置从其他站点检索的 cookie