微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

0x403020 处的指令引用了 0x403020 处的内存内存无法执行ida

如何解决0x403020 处的指令引用了 0x403020 处的内存内存无法执行ida

我正在尝试测试以下 shellcode:

#include <stdio.h>
#include <memoryapi.h>

unsigned char sc[] = "\x31\xc0\x50\x68\x41\x41\x41\x41\x54\xbb\x54\x26\x40\x00\xff\xd3\x83\xc4\x04\xc3\x66\x90\x66\x90\x66\x90\x66\x90\x66\x90\x66\x90";
int main()
{
    ((void(*)())sc)();
    return 0;
}

shellcode 只是假设打印 AAAA

直接执行我的 shellcode 没有任何作用。使用 IDA 调试后,我意识到程序在尝试执行 shellcode 时崩溃并出现以下错误

403020:0x403020 处的指令引用了 0x403020 处的内存。内存无法执行 -> 00403020 (exc.code c00000005,tid 91140)

IDA 中的 shellcode 段:

.data:00403020 public _sc
.data:00403020 _sc:                                    ; CODE XREF: _main+10p
[EAX here] .data:00403020                                         ; DATA XREF: _main+Bo
[EIP here] .data:00403020 xor     eax,eax
.data:00403022 push    eax
.data:00403023 push    offset unk_41414141
.data:00403028 push    esp
.data:00403029 mov     ebx,offset _malloc
.data:0040302E call    ebx ; _malloc
.data:00403030 add     esp,4
.data:00403033 retn

我的 EIP 永远无法执行 xor eax,eax提示上述错误

我在 Windows 10 中禁用了 DEP。

我也尝试使用IDC SetSegmentAttr(0x00403000,SEGATTR_PERM,4 | 1 | 2);更改该段的权限,该段内存的权限如下:

WINDBG>!vprot 0x403020
BaseAddress:       00403000
AllocationBase:    00400000
AllocationProtect: 00000080  PAGE_EXECUTE_WRITEcopY
RegionSize:        00001000
State:             00001000  MEM_COMMIT
Protect:           00000004  PAGE_READWRITE
Type:              01000000  MEM_IMAGE
403020: The instruction at 0x403020 referenced memory at 0x403020. The memory Could not be executed -    > 00403020 (exc.code c0000005,tid 9140)

我编译的程序如下:

gcc -g testshellcode.c -o testshellcode.exe -fno-stack-protector -m32

有人能指出我这里有什么问题吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。