看板 ASM 關於我們 聯絡資訊
應該可以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)
loveflames:我對int 0x80不熟,我的直覺是少了操作堆疊的指令 12/30 17:47
loveflames:建議把前面的asm code拿到其它函式 12/30 17:48
loveflames:如果是用x86,就是在頭尾補上push/pop esp跟ebp的指令 12/30 17:49
cobrasgo:我查到了囧,原來是現代作業系統會把stack的flag設成RW 12/30 17:51
cobrasgo:要RWE那個E被設起來才能執行,想想也有道理,不然往stack 12/30 17:52
cobrasgo:塞就能執行,感覺好危險。 12/30 17:52
cobrasgo:要檢查STACK的權限可以readelf -l 執行檔| grep STACK 12/30 17:52
cobrasgo:這個問題卡了我三天啊~~~~~~~ 12/30 17:53
cobrasgo:還是謝謝板主播冗回答,感謝 12/30 17:53
cobrasgo: 撥 12/30 17:57