c&c++反彙編與逆向分析學習筆記(6)--減法表達式

減法運算對應於彙編指令SUB,雖然計算機只會做加法,但是可以通過補碼轉換將減法轉換爲加法形式來完成。
    //C++源碼
    int nVarOne = argc;//變量定義
    int nVarTwo = 0;
    scanf("%d",&nVarTwo);//獲取變量nVarTwo的數據,使用scanf防止變量被常量化
    nVarOne = nVarOne - 100;//變量減常量的減法運算
    nVarOne = nVarOne + 5 - nVarTwo;//減法與加法混合運算
    printf("nVarOne = %d\n",nVarOne);

    //C++源碼與反彙編代碼講解
    //C++
    nVarOne = nVarOne -100;
    //反彙編
    mov eax,dword ptr [ebp-4]//取變量nVarOne的數據到eax中
    sub eax,64h//使用sub指令,對eax執行減100操作
    mov dword ptr [ebp-4],eax//將結果賦值回nVarOne中
    
    //C++
    nVarOne = nVarOne + 5 - nVarTwo;
    //反彙編
    //按照自左向右順序依次執行
    mov ecx,dword ptr [ebp-4]
    add ecx,5
    sub ecx,dword ptr [ebp-8]
    mov dword ptr [ebp-4],ecx
    減法運算沒有使用加負數的表現形式。在實際的分析中,根據加法操作數的情況,當加數爲負數時,執行的並非加法而是減法操作。
    另外,編譯器優化策略與加法相同。
發佈了26 篇原創文章 · 獲贊 31 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章