6. Why C?
Why C?
較為貼近Machine Code
Machine Code易與Source Code一一對應
What about C++?
Much more complicated
Class
Member function
Member data
Virtual Function
Template
.....etc
22. Reverse Engineering
Part 2
從組合語言到除錯
Y.C. Ling
All Rights Reserved
2010/09/24
23. 從組合語言到除錯
核心精神
了解你的C++ Code會被編譯成怎樣的機器碼
組合語言的低階知識,的確數次幫我找到很難找的問題
但這招其實很難得用的出來
投資報酬率低XD
不是天天遇到需要看組語的鬼打牆Bug
If so, 程式碼的品質太差了
就算鬼打牆,也不一定能從組語看出端倪
24. 從組合語言到除錯
常應用的場合:
開啟Optimization造成Debugger資訊不完全
Crash Dump資訊不完全時
一行Code中有一連串的Function Call,不知道當在那個點
How to learn?
沒有捷徑
C++基本功
Detail knowledge of C++ Compiler
組合語言基本功
Also helps in optimization
以「對失效指標物件呼叫Member Function」為例
25. 靠腰,鬼打牆
void CPlayer::IncreaseHP(int iAmount)
{
// Do a lot of work....
m_iHP += iAmount; //有人問:當在這行是三小狀況?
}
m_pPlayer->IncreaseHP(10);
Access Violation
是m_pPlayer指標錯了嗎?
那為什麼Call IncreaseHP時不會當?