1. 程式人生 > >學匯編的時候可以拿IDA之類的反匯編工具輔助學習,再用gdb或者IDA動態調試,跟蹤每條指令的 執行結果。都不難

學匯編的時候可以拿IDA之類的反匯編工具輔助學習,再用gdb或者IDA動態調試,跟蹤每條指令的 執行結果。都不難

post 裏的 取地址 翻譯 mage fan 例子 輔助 blog

作者:潘安仁
鏈接:https://www.zhihu.com/question/40720890/answer/87926792
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

建議先去了解GCC的內聯匯編的格式,我之前也沒接觸過GCC的內聯匯編,都是看intel的匯編。臨時找了一篇文章GCC內聯匯編基礎-zhuhefang2006-ChinaUnix博客,學習了一下。
根據文章裏的例子:

技術分享圖片書中第二行匯編可以翻譯成intel的:
lea eax,[eax+2*eax]
也就是eax*3的意思,lea指令是一個取地址指令,具體可以去查手冊,簡單來說就是把右操作數的"["和"]"之間的值放到左操作數裏,這裏就是把eax+2*eax放到eax裏。

而第六行匯編其實是取指針指向的值的意思,也就是intel匯編的:
mov eax,[edx+4*eax]
意思是取內存地址edx+4*eax裏的值,放到eax裏。至於這個值是什麽,我們是不知道的,所以書裏也只寫了個M[……]。
如果把上條指令的mov變成lea:
lea eax,[edx+4*eax]
意思就是把edx+4*eax的值,放到eax裏。

學匯編的時候可以拿IDA之類的反匯編工具輔助學習,再用gdb或者IDA動態調試,跟蹤每條指令的 執行結果。都不難。

學匯編的時候可以拿IDA之類的反匯編工具輔助學習,再用gdb或者IDA動態調試,跟蹤每條指令的 執行結果。都不難