?? 技術難點.txt
字號:
3月14日
1,objdump -d bufbomb.o和objdump -d bufbomb得到的匯編代碼段是否有區別?
一個是沒有鏈接,一個鏈接過了.選擇使用objdump -d bufbomb,因為這個代碼鏈接過了,可以通過eip的值來觀察具體執行到哪條代碼
2,gdb調試時設置的斷點處于printf()語句的后面,可是為什么不先打印出那句話?
因為實際上通過觀察eip的值可以發現指令執行并沒有達到調用printf()語句的那條指令
3, 在gdb中p /x *(int*)(ebp)是打印ebp中的值還是ebp所指單元中的值?
打印的是ebp所指單元中的值,如果要打印ebp的值,可以使用p /x $ebp即行
3月15日
1,寄存器eip中存儲的是當前執行的指令的地址,可以通過p /x $eip來觀察現在執行到哪條指令。
2,究竟應該寫入一些什么樣的值了?這些值要求具有什么特性才能保證能夠達到題目中的要求?
3,test和getbuf 的棧分布情況表究竟是什么樣的了?
當設置斷點break getbuf時,函數的執行已經進入了getbuf函數,此時棧楨處于getbuf函數的棧楨中
______
______ ebp test函數的棧楨 0xbfffdfe8
______
______ esp bfffdfe0 當程序執行至48行和49行時的棧首指針,指令地址分別為0x80484aa和0x80484ba
______ 此處有2個存儲器單元沒有使用
______
______ getbuf函數返回到test函數時的返回地址, 內容為0x80484bf,即位調用getbuf指令的后一條指令
______ ebp getbuf函數的棧楨 0xbfffdfd8
______
______
______ 此處有6個儲存器單元沒有使用
______
______
______ esp 0xbfffdfc0
4,寫進buffer的數據是怎么存放的?總共為buffer分配多少空間?
存放在getbuf函數的棧楨中,從$ebp -24號存儲單元開始存放,一直往棧地址增大的方向存放,可以一直到$ebp -1,注意最后一定要留一個字節給'\0',否則當程序試圖自己往$ebp -1號存儲單元里面寫入'\0'時會出現段錯誤.
5, test函數中getbuf 函數的返回值是1?那么eax里面保存的就是數值1羅?局部變量val保存在什么位置?是否可以運用別人的思想?
就是改變保存局部變量val的存儲單元的值,同時改變getbuf函數的返回地址使其指向下一條指令的地址?
返回值是1,保存在局部變量 val中,而val的保存地址是$ebp -4。處于test的棧楨中
6,注意輸入數據的時候要將低位字節輸入在前。
7, 由于在getxs函數中存在最后一句話 *sp++ = '\0';所以如果只是簡單的改變一下val變量的存儲單元的值,會造成這句話在寫入時破壞test
棧楨中所保存的main函數ebp值和返回地址,所以要重新覆蓋這兩個單元的值。
8,為什么main函數的ebp值老是在變化?
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -