2014-02-19 105 views
0

我想用一些shellcode產生一個shell。有效負載在程序本身,但是,當我運行然後單獨編程時,我得到了分段錯誤,但是當在gdb中運行時,我的shell會打開。 有人可以指出問題可能是什麼?在gdb中運行,但不在gdb外

[email protected]:~/folder$ ./a.out h h 
Segmentation fault (core dumped) 

[email protected]:~/folder$ gdb -q a.out 
Reading symbols from /home/folder/a.out...done. 
(gdb) run h h 
Starting program: /home/folder/a.out h h 
process 22119 is executing new program: /bin/dash 
$ 
$ 
+0

我有一個Heisenbug這樣的一次。這是未定義的行爲,由堆損壞引起。感謝它的可重複性。我建議你將代碼縮小到一個[最小完整示例](http://www.sscce.org),然後我們將嘗試發現該錯誤。 – Beta

回答

3

什麼問題可能是

首先,因爲你得到一個core,你可以只是看它理解崩潰。其次,GDB在默認情況下禁用地址隨機化(ASLR)(爲了讓您更容易調試,所以一切都停留在一個地方),而在GDB之外運行a.out可能有完整的ASLR,這可能解釋了不同的行爲有和沒有GDB的a.out

您可以全局禁用ASLR:

sudo -c "echo 0 > /proc/sys/kernel/randomize_va_space" 

或者你可以在GDB啓用隨機選擇:

(gdb) set disable-randomization off