今天做了一道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
很簡單的一個問題 , 大牛請輕噴。