# 資訊安全概論 HW6 ## Q1 int v的位置在rbp - 0X8。 int n的位置在rbp - 0X4。 也就是說在每個factorial函數起始時並沒有給n、v初始值,每個函數會直接從rbp開始拉各4 byte給每個int。這就造成沒有初始區域變數的後果,前一個函數pop出去後,後一個函數的rbp來到了前一個函數的位置,宣告兩個int變數時用了頭8個byte,剛好用到了前一個函數用完的那兩個位置,這就是為什麼區域變數能用出全域變數的效果。 ## Q2 ### gets 無法指定buffer size,可以宣告char array point給他就可以指定有多長,但其無法判斷是否有超過,可以寫出其array 長度並造成可能的漏洞,在讀到最後一個byte的時候會插入一個\0。 ### fgets 可以傳入參數指定buffer size,會插入\0終止。 ### read 可以傳入參數指定buffer size,但不會插入\0來終止。 ### strcpy 不行調buffer,會插入\0終止。 ### strncpy 可以指定buffer size,會插入\0來終止。 ### readlink 可以指定buffersize,但不會插入\0來終止。