gpt4 book ai didi

linux - 在自修改汇编代码中调用 mprotect 后仍然出现段错误

转载 作者:太空狗 更新时间:2023-10-29 11:36:28 28 4
gpt4 key购买 nike

我正在尝试学习一些堆栈溢出技术并在其中使用 shellcode。我能够成功地使用一些基本的 shellcode。然后我开始在程序集中使用 exeve 并调用 ls -l ,再次成功。现在我正在尝试使用相对寻址并摆脱代码中的空值。因此,我尝试了一个简单的自修改代码。我知道代码段是只读的,所以我尝试调用 mprotect 使其可写。我的代码仍然无法正常工作,并且在 movb %al, 0x7(%esi) 处出现段错误。如果有人可以让我深入了解我的代码中的错误,我将非常感激。

.text
.globl _start

_start:
jmp StartPoint

execvecall:
popl %esi # the address of string

#calling mprotect to make the memory writable
movl $0x7d, %eax
movl %esi, %ebx
movl $0x20, %ecx
movl $7, %edx
int $0x80

xorl %eax, %eax

movb %al, 0x7(%esi) #putting zero for at the end of /bin/ls
movb %al, 0xa(%esi) #putting another zero at the end of -l

#this part forms an array ending with for the second parameter of execve
movl %esi, 0xb(%esi)
movl %esi, %ebx
addl $8, %ebx
movl %ebx, 0xf(%esi)
movl %eax, 0x13(%esi)

movl %esi, %ebx
leal 0xb(%esi), %ecx
leal 0x13(%esi), %edx

movb $11, %al
int $0x80

StartPoint:
call execvecall
SomeVarHere:
.ascii "/bin/ls0-l0111122223333"

最佳答案

man mprotect 说:

The implementation may require that addr be a multiple of the page size as returned by sysconf().

这显然是您机器上的情况。假设您有 4 KiB 页面(在 x86 上,没有 PSE),您可以通过执行将地址向下舍入

and $0xfffff000, %ebx

之后

movl %esi, %ebx

准备调用 mprotect 时。

请注意,调用 mprotect 会更改整个页面的保护。

关于linux - 在自修改汇编代码中调用 mprotect 后仍然出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32721089/

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