Try   HackMD

資訊安全概論 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來終止。

可以指定buffersize,但不會插入\0來終止。