能力值:
( LV4,RANK:50 )
|
-
-
2 楼
[QUOTE=wmhnq;1321724]unsigned char mycode[100]={0x90,0x90,0x90,0x90,0x3c};
((void (*)(void))&mycode[0])();
这个全局数组变量mycode是在.data区段里吧?
.data区段里没有可执行属性,怎么也是可执行的呢???[/QUOTE]
如果是局部变量的话,会被放到栈上
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是全局数组,lordpe看了下变量mycode确实是在.data区段,.data区段里没有可执行属性,怎么也是可执行的呢???
|
能力值:
( LV12,RANK:340 )
|
-
-
4 楼
会不会是程序运行后修改了data段的内存保护属性?
|
能力值:
( LV4,RANK:55 )
|
-
-
5 楼
跟一下 看看,eip执行到shellcode的时候是不是在data段
感觉不会啊,是不是在栈中有一份拷贝
看了下eip确实在data段....
内存映射,项目 14
地址=00407000
大小=00004000 (16384.)
宿主=qweqweqw 00400000
区段=.data
类型=Imag 01001002
访问=R
初始访问=RWE
是可执行的,loadpe看确实是只是可读写,会不会是加载到内存的时候被赋予了可执行属性
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
#include "stdafx.h"
unsigned char mycode[100]={0x90,0x90,0x90,0x90,0xc3};
int _tmain(int argc, _TCHAR* argv[])
{
((void (*)(void))&mycode[0])();
return 0;
}
// 就是个简单代码,没有其他地方修改。lordpe看了下变量mycode确实是在.data区段,.data区段里没有可执行属性,怎么也是可执行的呢???
|
|
|