C语言之 判断语句基础与if语句反汇编
发布日期:2021-05-08 23:08:22 浏览次数:20 分类:博客文章

本文共 2385 字,大约阅读时间需要 7 分钟。

0x01.判断语句介绍以及用法

判断语句有哪些?

1、If
用法1:

if (条件){      //代码块}

当条件成立,也就是为True时,执行{}中的代码

用法2:

if(条件){      //代码块}else{      //代码块}

如上,当条件不成立的时候执行else语句里面的代码

用法3:

if(条件){      //代码块}else if{      //代码块}else{      //代码块}

例如

2、Switch

switch (表达式){	case 常量表达式1:		语句;		break;	case 常量表达式2:		语句;		break;	case 常量表达式3:		语句;		break;	case 常量表达式3:		语句;		break;	default:		语句;		break;}

switch要求:

1、case后面必须是常量表达式

2、case后常量表达式的值不能一样

3、switch后面表达式必须为整数

3、?:运算符

int main(){	int a = 10;	int b = 5;	int c = a > b ? a : b;	printf("%d", c);	return 0;}

到此,条件判断语句就差不多了

0x02.JCC指令与IF语句反汇编

1、案例一

mov eax, dword ptr[ebp + 8] 分析:cmp指令 影响标志位

cmp eax, dword ptr[ebp + 0Ch] jle :小于或者等于就跳转到00401059
jle 00401059

2、案例二

mov eax, dword ptr[ebp + 8] 分析:cmp指令 影响标志位

cmp eax, dword ptr[ebp + 0Ch] jl :小于则跳转
jl 00401059

3、案例三

mov eax, dword ptr[ebp + 8] jge :大于或者等于则跳转

cmp eax, dword ptr[ebp + 0Ch]
jge 00401059

4、案例四

mov eax, dword ptr[ebp + 8] jg :大于则跳转

cmp eax, dword ptr[ebp + 0Ch]
jg 00401059

整体分析:

函数调用处代码:

push 5 分析:

push 4 两个参数
call 0040100f
add esp, 8

接下来就可以做个小练习了:

调用处代码:push        5push        4call        0040100fadd         esp, 8函数内部:函数内部功能分析:00401030   push        ebp00401031   mov         ebp, esp						1、分析参数:00401033   sub         esp, 44h00401036   push        ebx00401037   push        esi00401038   push        edi						2、分析局部变量00401039   lea         edi, [ebp - 44h]0040103C   mov         ecx, 11h00401041   mov         eax, 0CCCCCCCCh00401046   rep stos    dword ptr[edi]00401048   mov         eax, [004225c4]				        3、分析全局变量0040104D   mov         dword ptr[ebp - 4], eax00401050   mov         ecx, dword ptr[ebp + 8] 00401053   cmp         ecx, dword ptr[ebp + 0Ch]00401056   jg          0040106400401058   mov         edx, dword ptr[ebp + 0Ch]	                4、功能分析0040105B   add         edx, dword ptr[ebp - 4]0040105E   mov         dword ptr[004225c4], edx00401064   pop         edi00401065   pop         esi						5、返回值分析00401066   pop         ebx00401067   mov         esp, ebp00401069   pop         ebp0040106A   ret						                6、还原成C函数

00401048 mov eax, [004225c4] 把004225c4的值给eax

0040104D mov dword ptr[ebp - 4], eax 把eax的值给栈低-4的地方
00401050 mov ecx, dword ptr[ebp + 8] 把4给ecx

00401053 cmp ecx, dword ptr[ebp + 0Ch] if(ecx>5)

00401058 mov edx, dword ptr[ebp + 0Ch] 把5给edx
0040105B add edx, dword ptr[ebp - 4] 把edx加上eax全局变量的值
0040105E mov dword ptr[004225c4], edx 再把eax的值给 004225c4地址上

上一篇:变量覆盖漏洞
下一篇:C语言函数的学习

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月03日 15时38分34秒