1. 程式人生 > >iOS安全攻防(十二)arm彙編之mov 和 mvn

iOS安全攻防(十二)arm彙編之mov 和 mvn

先看2段程式碼:

NewImageNewImage

第一段程式碼main裡面沒有任何語句,第2段程式碼是返回0值,這2段程式碼的反彙編是一樣的,看下圖:

NewImage

一共 2行彙編程式碼,第2行 bx lr 代表返回到main呼叫之後的語句,而第一行 movs是 mov的擴充套件,最後字母s代表影響標誌位,從彙編程式碼可知,如果返回int型別,沒有明顯的 return 語句,那預設就是返回0(返回暫存器r0)。(0x代表16機制)

接著修改程式碼為return  -1看下反彙編

NewImage

return  -1程式碼,推測第一行肯定會和之前的不同,但是很奇怪不是movs,而是mov.w,這裡.w只是強調是32位架構的。而字面值-1卻變成了0xffffffff,這是因為記憶體中沒有真正的負值,負值全部以補碼的形式來表現,(補碼 = 反碼+1),而正值的補碼就是其自身。

接著修改程式碼為return -2看下反彙編

NewImage

第一行程式碼又變動了,之前都是mov的擴充套件,現在變成mvn,mvn的意思是,先取反再賦值,0x1取反是 1111 1111 1111 1111 1111 1111 1111 1110,16進製表示為0xfffffffe,而0xfffffffe就是-2的補碼。