使用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 (将#修改为@)