今天開始練基礎功,逆向我們常見的條件判斷式。包括:if、if-else、if-else-if。這些判斷式用高階語言寫都不難,但如果變成組合語言呢?請各位讀者挑戰看看!
挑戰方式:每個區塊會分成三個段落,第一是組合語言區、第二是工具反組譯區、第三是解答。歡迎大家不要在看解答的情況下進行自我的挑戰!
今天總共有三題。首先是第一題,if:
看到 cmp 與 jge,可看出這是一個比較。因此有兩個方框,一個是條件成立,一個是不成立的情況。
解答公布:
#include<stdio.h>
int main(void){
int num1 = 5;
int num2 = 10;
if(num1 < num2){
return 0;
}
}
接著是第二題,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:
先比較是否大於等於,再比較是否相同。
解答公布:
#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;
}
相信讀者可能觀察到,if-else-if 裡面藏了一個 if-else。第三題雖然看起來最複雜,不過將其細部分解後,就會發現其實不會很難理解!
恭喜大家完成這三題的逆向!透過圖形化的理解,相信未來讀者看到相似的圖型,心中大概就能明白這段程式碼的運作邏輯!明天接著逆向循環的程式碼。