如何解决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 举报,一经查实,本站将立刻删除。