[問題] 這段shellcode為何會code dump?

看板ASM (組合語言)作者 (體重突破所有均線)時間14年前 (2010/12/30 17:04), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串1/1
應該可以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)

12/30 17:47, , 1F
我對int 0x80不熟,我的直覺是少了操作堆疊的指令
12/30 17:47, 1F

12/30 17:48, , 2F
建議把前面的asm code拿到其它函式
12/30 17:48, 2F

12/30 17:49, , 3F
如果是用x86,就是在頭尾補上push/pop esp跟ebp的指令
12/30 17:49, 3F

12/30 17:51, , 4F
我查到了囧,原來是現代作業系統會把stack的flag設成RW
12/30 17:51, 4F

12/30 17:52, , 5F
要RWE那個E被設起來才能執行,想想也有道理,不然往stack
12/30 17:52, 5F

12/30 17:52, , 6F
塞就能執行,感覺好危險。
12/30 17:52, 6F

12/30 17:52, , 7F
要檢查STACK的權限可以readelf -l 執行檔| grep STACK
12/30 17:52, 7F

12/30 17:53, , 8F
這個問題卡了我三天啊~~~~~~~
12/30 17:53, 8F

12/30 17:53, , 9F
還是謝謝板主播冗回答,感謝
12/30 17:53, 9F

12/30 17:57, , 10F
12/30 17:57, 10F
文章代碼(AID): #1D74iHz4 (ASM)
文章代碼(AID): #1D74iHz4 (ASM)