完善了一些課上交了但不夠完善的測試並補交了課上沒有完成的測試html
調用附圖代碼,編寫一個程序 「week0602學號.c",用show_int(), show_float()打印一下你的4位學號,參考教材P33打印出匹配的位序列。sass
提交運行結果截圖,要全屏,要包含本身的學號信息函數
3.*************課下把代碼推送到代碼託管平臺**************學習
經過學習課本P33與P82的代碼及練習,我輸入學號信息5320,依據輸出獲得的int 和 float型結果,將其轉換爲2進制,分析以下:
測試
課上交的太慌了,交錯了截圖,如下爲正確的截圖.net
1 short int v = -學號後四位3d
2 unsigned short uv = (unsigned short) v調試
3 printf("v = %d, uv = %u\n ", v, uv);code
3 分析p /x v; p /x uv 與程序運行結果的不一樣和聯繫htm
經過學習博客,對gdb內容進行了一下總結:
1.條件斷點:b fxx(函數名)
2.條件斷點:b 12 if i=5000
行斷點:b 行號
4.臨時斷點:tb 行號
5.還能夠經過p 變量在調試過程當中來查看變量的值
p/x xx 是用16進制查看,首先b 5 設置行斷點,而後r 運行至行斷點,使用p/x 查看v、uv的值。結果與運行出來的結果比較截圖以下
不一樣:可看出用p/x查看獲得的v和uv值是同樣的,而直接運行獲得的結果v=-5320,uv=60216
聯繫:
在書中P49頁有提到產生這種緣由的解釋,將short強制類型轉換爲unsigned short 改變數值,可是不改變位的表示,因此16進制查看時v與uv的結果相同,可是運行出來的結果不一樣。
1 經過輸入gcc -S -o main.s main.c 將下面c程序」week0603學號.c「編譯成彙編代碼
int g(int x){ return x+3; } int f(int x){ int i = 學號後兩位; return g(x)+i; } int main(void){ return f(8)+1; }
刪除彙編代碼中 . 開關的代碼,提交f 函數的彙編代碼截圖,圖中用矩形標出函數棧幀的造成和銷燬的代碼
我學習了一下課本3.7章的內容,並查閱了博客函數棧幀的建立與銷燬獲得以下圖所示結果:
1 經過輸入gcc -S -o main.s main.c 將下面c程序」week0603學號.c「編譯成彙編代碼
int g(int x){ return x+3; } int f(int x){ int i = 學號後兩位; return g(x)+i; } int main(void){ return f(8)+1; }
參考http://www.cnblogs.com/lxm20145215----/p/5982554.html,使用gdb跟蹤彙編代碼,在紙上畫出f中每一條語句引發的eip(rip),ebp(rbp),esp(rsb),eax(rax)的值和棧的變化狀況。提交照片,要有學號信息。
參考博客GDB調試彙編堆棧過程分析
1.輸入disassemble 調出對應的彙編代碼,disassemble指令獲取彙編代碼,用i(info) r(registers)指令查看各寄存器的值
2.並重復si-->i r-->x/a 寄存器(地址)
disassemble指令獲取彙編代碼,用i(info) r(registers)指令查看各寄存器的值
3.通過分析獲得以下變化狀況
測試結果爲:
目前還不會,和同窗們討論了一下仍然沒法理解,但願老師講解一下