iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
1

今天開始練基礎功,逆向我們常見的條件判斷式。包括:if、if-else、if-else-if。這些判斷式用高階語言寫都不難,但如果變成組合語言呢?請各位讀者挑戰看看!

挑戰方式:每個區塊會分成三個段落,第一是組合語言區、第二是工具反組譯區、第三是解答。歡迎大家不要在看解答的情況下進行自我的挑戰!

今天總共有三題。首先是第一題,if:

if

看到 cmp 與 jge,可看出這是一個比較。因此有兩個方框,一個是條件成立,一個是不成立的情況。

解答公布:

#include<stdio.h>

int main(void){
    int num1 = 5;
    int num2 = 10;
    if(num1 < num2){
        return 0;
    }
}

接著是第二題,if-else:

if-else

與 if 情況相仿。

解答公布:

#include<stdio.h>

int main(void){
    int num1 = 16;
    int num2 = 32;
    if(num1 < num2){
        printf("num1 < num2");
    }else{
        printf("num1 > num2");
    }
    return 0;
}

最後是第三題,if-else-if:

if-else-if

先比較是否大於等於,再比較是否相同。

解答公布:

#include<stdio.h>
int main(void){
    int num1 = 16;
    int num2 = 16;
    if(num1 < num2){
        printf("num1 < num2");
    }else if(num1 == num2){
        printf("num1 =  num2");
    }else{
        printf("num1 > num2");
    }
    return 0;
}

Reference

比較

相信讀者可能觀察到,if-else-if 裡面藏了一個 if-else。第三題雖然看起來最複雜,不過將其細部分解後,就會發現其實不會很難理解!

結論

恭喜大家完成這三題的逆向!透過圖形化的理解,相信未來讀者看到相似的圖型,心中大概就能明白這段程式碼的運作邏輯!明天接著逆向循環的程式碼。


上一篇
Day18 - Mac 逆向工具 - Hopper Disassembler
下一篇
Day20 - 逆向並找出循環的特徵
系列文
逆向工程 – 從入門到放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言