作者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