pwn中的一個小問題

     今天做了一道pwn的題目, 從IDA 上看偏移是bp-14h , 但是我輸入了14h後並未到達ebp, 而是還有0x8 的距離, 難道IDA有誤。 於是就看了 下函數頭, 發現了一條語句

and esp 0x0fffffff0 ,實際上就是對齊用的, 所以多了2個dd .

   下面引用看雪上的一段話

至於 "and esp,FFFFFFF0h" 
因爲0xFFFFFFF0 = 11111111 11111111 11111111 11110000

這個相當於把esp的最後4個bit位清零, 也就是把stack往低地址對齊使其能夠被16整除...這樣對32位或者64位CPU來說,所有的的stack上的基本變量都可以一次訪問到(如果地址沒有對齊,那麼有可能CPU需要訪問兩次內存來獲得一個8 byte的變量) -- 這樣看來,實際上將stack地址在8 byte上對齊對32位甚至64位的CPU都足夠了...但是問題是對於一些 SIMD (single instruction, multiple data) 的指令*規定*訪問的地址必須向16 byte對齊 (也就是必須被16爲整除 -- 這是從指令效率的方面來設計的).    

地址http://bbs.pediy.com/showthread.php?t=179449


很簡單的一個問題 , 大牛請輕噴。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章