如何解决使用mmap读取文件,并使用NASM x86_64在mmaped文件中执行系统调用
我是汇编语言的新手,花了一些时间来理解和编写代码。当前,我必须使用mmap加载文件并执行写在该文件中的行。此其他文件(称为 call.nasm )包含以下退出代码:
mov rdi,0
mov rax,60 ; exit(2)
syscall
我必须从 current.nasm 将此出口称为出口。我能够成功映射call.nasm文件,但无法读取该文件并执行退出系统调用。这是 current.nasm 中用于映射call.nasm的映射和读取代码:
mov rdi,filepath
mov rsi,0
mov rdx,0
mov rax,2 ; open(2)
syscall
mov rdi,0
mov rsi,bytes ; bytes for mapping
mov rdx,1
mov r10,0x02 ; MAP_PRIVATE
mov r12,rax ; fd
mov r9,0 ; offset
mov rax,9 ; mmap(2)
syscall
mov rdi,rax ; fd
mov rsi,[r8] ; buffer
mov rdx,1024 ; count
mov rax,0 ; read(2)
syscall
这是用 x86_64 nasm 编写的。我什至更改了call.nasm文件的权限,但到目前为止,我无法读取或执行其他文件中的行。
当我运行strace来执行current.nasm文件时,读取操作出现-1 EBADF (Bad file descriptor)
错误。
任何帮助将不胜感激。谢谢。
更新:
我能够解决错误-1 EBADF (Bad file descriptor)
。感谢@PeterCordes指出错误。以下读取代码修复了该错误:
mov rdi,r12 ; fd
mov rsi,buffer ; buffer
mov rdx,bytes ; count
mov rax,0 ; read(2)
syscall
要跳转到退出代码,必须仅指向内存地址。我指的是.nasm而不是我为mmap编译的二进制文件,这很糟糕。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。