作者cobrasgo (体重突破所有均线)
看板ASM
标题[问题] 这段shellcode为何会code dump?
时间Thu Dec 30 17:04:14 2010
应该可以po这里吧囧
===================
#include <stdio.h>
int main(){
//exit() in asm
__asm__
(
"xorl %ebx, %ebx;"
"movl %ebx, %eax;"
"inc %eax;"
"int $0x80;"
)
printf("main\n");
return 0;
}
==================
上面这个程式是我用来产生机器码的
直接执行是work的
printf("main\n")这行没有被执行
其中组语部份的机器码如下:
char shellcode[]="\x31\xdb\x89\xd8\x40\xcd\x80";
然後我用另一个方式,来执行这段机器码
程式如下:
==================
#include <stdio.h>
char shellcode[]="\x31\xdb\x89\xd8\x40\xcd\x80";
int main(int argc, char** argv){
__asm__
(
"call shellcode;"
);
printf("main\n");
return 0;
}
=================
就会core dump
请问一下是为什麽?
谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.130.51.128
※ 编辑: cobrasgo 来自: 220.130.51.128 (12/30 17:04)
※ 编辑: cobrasgo 来自: 220.130.51.128 (12/30 17:05)
1F:推 loveflames:我对int 0x80不熟,我的直觉是少了操作堆叠的指令 12/30 17:47
2F:→ loveflames:建议把前面的asm code拿到其它函式 12/30 17:48
3F:→ loveflames:如果是用x86,就是在头尾补上push/pop esp跟ebp的指令 12/30 17:49
4F:→ cobrasgo:我查到了囧,原来是现代作业系统会把stack的flag设成RW 12/30 17:51
5F:→ cobrasgo:要RWE那个E被设起来才能执行,想想也有道理,不然往stack 12/30 17:52
6F:→ cobrasgo:塞就能执行,感觉好危险。 12/30 17:52
7F:→ cobrasgo:要检查STACK的权限可以readelf -l 执行档| grep STACK 12/30 17:52
8F:→ cobrasgo:这个问题卡了我三天啊~~~~~~~ 12/30 17:53
9F:→ cobrasgo:还是谢谢板主播冗回答,感谢 12/30 17:53
10F:→ cobrasgo: 拨 12/30 17:57