.balignl 16,0xdeadbeef
這個代碼很有意思,作者挺搞笑。剛開始的時候看不懂這個代碼是什麼意思,balignl很顯然是對齊的意思,我當時一看就知道這是16位元組對齊,可是,0xdeadbeef是什麼東東?呵呵,後來我找了半天資料才知道沒什麼意思,我們可以把它用其他的代替,比如0xgoodbeef,0xgoodgirl,明白了吧。
下面我對此進行講解:
syntax:
.balign {alignment} {,fill} {,max}
Description: Word align the following code to alignment byte boundary (default=4). Fill skipped words with fill (default=0 or NOP). If the number of bytes skipped is greater than max, then don't align (default=alignment ).
alignment可以是4,8,16,32,的預設值是4
fill 就是要填充的内容
max 是一個數值,如果從目前位置開始移動到符合要求的位置所移動的位址大于max時,不采用對齊。
.balignl和.balignw是.balign的變形,前者是采用4位元組填充,後者是2位元組填充。
例如:
目前位址是0x0000 0001
.balignl 16,0xgoodgirl
16位元組對齊,符合要求的第一個位址是0x0000 0010,可是指針移動了15位置,也就是15個位元組,oxgoodgirl占4個位元組,是以不填充空白區域,空白區域内容是未知的。
假如目前位址是0x0000 000e
指針移動到0x0000 0010,移動了2次,也就是2個位元組,不足4個位元組,空間不夠,是以也不填充,這2個位元組的内容是未知的。
假如目前位址是0x0000 000c
指針移動到0x0000 0010,移到4次,也就是4個位元組,正好将0xgoodgirl填充進去。