在做一道題是,當scanf的字符串是'%d'時,用str(0xfc1)會輸入修改成功。
當scanf的字符串是'%s'時,用p64(0xfc1)會輸入修改成功。
想了很久,才明白。
用pwn腳本時,用str()發送數據是模擬交互輸入,比如str(0xfc1)會發送過去 4033 這個字符串,就相當於我們與程序交互時,輸入了4033這個數字,所以可以用"%d"來讀取,並用小端序存儲
用p64()發送數據時,是發送的字節流,也就是比特流(二進制流)。本來是01這樣表示的,但是ide為了方便觀察, 就轉換成了\xc1\x0f\x00\x00\x00\x00\x00\x00。發送時,也是按照字節來發,所以要用"%s"來讀取
注:我一直想為什么是按照字符串來讀取,並且\xc1\x0f是反的呢,我猜想的是因為字符串放入內存是\x0f先放入棧中,然后\xc1再放入,所以會這樣。
我試了試用‘%s’讀取4033,讀入內存的是 0x0000000033333034。 用'%d'讀取4033,讀入內存的是0xfc1.