Ubuntu的GDB講完了,我們這次來看Cygwin到IDA結束的樣子。
可以看到第一個是將EAX設為0,這個是之前就出現過的,讓系統知道這個程式並沒有出現錯誤,再來就是將RSP加30h,從原本的CBE0+30h到CC10,跟RBP相同的值。
最後將RBP給POP出去,可以看到Stack現在放的值是7FFFFCD30,也就是說Call過來的程式的RBP是這個值,而他的RIP就是下一行的7FFA5F587FA9。
而IDA很貼心的在旁邊寫了這個Address是哪一隻程式的,可以看到是Cygwin1.dll,這個跟一開始的call __main是一樣的程式,因此可以大概推測出只要是用Cygwin寫的程式,開始和結束都會導入Cygwin1.dll這支動態連結函式庫。
POP RBP後,如果們預測的相同,RBP變為CD30。
再下去的話也是和我們預測的一樣會回到Cygwin1.dll,IDA的左邊還有一個藍色的RIP,告知現在程式的RIP指向這裡。
至此,我們看了Ubuntu GDB分析GCC所產出來的程式以及Windows IDA分析Cygwin GCC產出來的程式,從哪裡進入到回去哪裡,還有Call function時的變化,這些觀念對於後續的Stack buffer overflow很重要,下一章會開始說明Stack buffer overflow的成因。