一个完整的原生程序中,除了顺序执行的代码流,还有 for 循环、while 循环、if……else 语句、switch 语句等分支语句结构。了解这些语句结构所生成的汇编指令特点,有助于理解反汇编代码的行为
编译原生 C 程序
实例:app6(包含 C 语言中常见分支语句结构)
#include <stdio.h>
int nums[5] = {1, 2, 3, 4, 5};
int for1(int n)
{
int i = 0;
int s = 0;
for (i = 0; i < n; i++)
{
s += i * 2;
}
return s;
}
int for2(int n)
{
int i = 0;
int s = 0;
for (i = 0; i < n; i++)
{
s += i * i + nums[n - 1];
}
return s;
}
int dowhile(int n)
{
int i = 1;
int s = 0;
do
{
s += i;
} while (i++ < n);
return s;
}
int whiledo(int n)
{
int i = 1;
int s = 0;
while (i <= n)
{
s += i++;
}
return s;
}
void if1(int n)
{
if (n < 10)
{
printf("the number less than 10\n");
}
else
{
printf("the number greater than or equal to 10\n");
}
}
void if2(int n)
{
if (n < 16)
{
printf("he is a boy\n");
}
else if (n < 30)
{
printf("he is a young man\n");
}
else if (n < 45)
{
printf("he is a strong man\n");
}
else
{
printf("he is an old man\n");
}
}
int switch1(int a, int b, int i)
{
switch (i)
{
case 1:
return a + b;
break;
case 2:
return a - b;
break;
case 3:
return a * b;
break;
case 4:
return a / b;
break;
default:
return a + b;
break;
}
}
int main(int argc, char const *argv[])
{
printf("for1: %d\n", for1(5));
printf("for2: %d\n", for2(5));
printf("dowhile: %d\n", dowhile(100));
printf("while: %d\n", whiledo(100));
if1(5);
if2(35);
printf("switch1: %d\n", switch1(3, 5, 3));
return 0;
}
文章目录原生 C 程序逆向分析编译原生 C 程序for 循环分支结构for1()for2()while 循环分支结构dowhile()whiledo()if……else 分支结构if1()if2()switch 循环分支结构优化后的 C 程序原生 C 程序逆向分析一个完整的原生程序中,除了顺序执行的代码流,还有 for 循环、while 循环、if……else 语句、switch 语句等分支...