gpt4 book ai didi

linux - x86_64 程序集 execve *char[] 系统调用

转载 作者:IT王子 更新时间:2023-10-29 00:34:59 24 4
gpt4 key购买 nike

我试图在不使用标准库的情况下使用一些 Linux 64 位 x86 程序集,但是我在处理提供给我的程序的参数 (argv) 时遇到了一些问题。我认为(根据文档)rsp 标记 argc qword 的开始,而 [rsp + 8] 将是 argv。不幸的是,情况并非如此,以下(删节)程序会导致 EFAULT(错误地址)

sys_execve equ 59
sys_exit equ 60

section .data
child db "/bin/sh", 0

global _start

section .text
_start:
mov rdi, child ; #1 filename
mov rsi, [rsp + 8] ; #2 argv
mov rdx, 0 ; #3 envp = 0

mov rax, sys_execve ; execve
syscall
mov rax, rdi ; #1 Return value
mov rax, sys_exit ; exit
syscall

有关 amd64 调用约定和将 *char[] 传递到内核的帮助将不胜感激。

谢谢

最佳答案

rsp+8 处,您将找到带有程序路径的字符串地址。指向第一个参数的指针位于 [rsp+16]。但是对于 execve,您需要一个指向字符串指针数组的指针,该指针以指向程序路径的指针开头(您可以(ab)使用 [rsp+8]) .

所以改变

mov rsi, [rsp + 8]

lea rsi, [rsp + 8]

关于linux - x86_64 程序集 execve *char[] 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com