问题描述
我是汇编语言的新手,花了一些时间来理解和编写代码。当前,我必须使用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 (将#修改为@)