gpt4 book ai didi

assembly - 使用 gnu asm 在 x64 中执行参数

转载 作者:行者123 更新时间:2023-12-04 07:18:50 25 4
gpt4 key购买 nike

我正在尝试在 GNU asm 中为 linux 编写 shellcode,但我无法使用参数调用 execve。

我正在尝试做的事情:

execve("/bin/ls", ["/bin/ls", "-la", NULL], NULL);

这是我的代码:

.section .text
.globl _start
_start:
push $0x3b
pop %rax
xorq %rdx,%rdx

push %rdx
movabs $0x61616161616c2d2d,%r8
shr $0x8, %r8
push %r8

movabs $0x736c2f6e69622f2f,%r8
shr $0x8, %r8
push %r8
mov %rsp, %rdi
push %rdx
push %rdi
mov %rsp, %rsi
syscall

push $0x3c
pop %rax
xorq %rdi, %rdi
syscall

在对 execv 的系统调用之前,这是我的 reg/stack : gdb

我想:RDI 必须包含“/bin/ls”地址RSI 必须包含“/bin/ls”地址的地址RDX = NULL

shellcode 正在执行/bin/ls 但没有使用 -la args。

怎么了?

谢谢

最佳答案

您从未将指针推送到第二个 argv 字符串。 推 %rdx; push %rdi 推送 NULL,然后是指向 "/bin/ls" 的指针,但是没有指向您的 "-laaaaa" 的指针。在两者之间您还需要一个push。例如:

    push %rdx           // NULL
lea 8(%rdi), %rcx // pointer to "-laaaaa"
push %rcx
push %rdi // pointer to "/bin/ls"
mov %rsp, %rsi // pointer to the argument vector

关于assembly - 使用 gnu asm 在 x64 中执行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68627871/

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