#include "IO_TOOL.h"
void IterationArray(int arr[],int lenght,char chooes)
{
char cchooes = chooes;
if(cchooes == 'w')
{
int i = 0;
while (1)
{
if(i>=lenght)break;
PRINT_INT(arr[i]);
i++;
}
}
else if(cchooes == 'f')
{
for (int i = 0; i < lenght; ++i)
{
PRINT_INT(arr[i]);
}
}
else
{
return;
}
}
int main(void)
{
int iArr[] = {1,2,3};
IterationArray(iArr,3,'f');
PRINT_;
IterationArray(iArr,3,'w');
return 0;
}
首先呢是main函数有三个call分别就对应着3个函数
001115AC | | push 66 | ascll码 == 'f'
001115AE | | push 3 | 数组长度
001115B0 | | lea eax,dword ptr ss:[ebp-14] |
001115B3 | | push eax |
001115B4 | | call 6_3_2.array_loop.c.111046 | IterationArray函数地址
001115B9 | | add esp,C |
001115BC | | push 6_3_2.array_loop.c.11A068 | "________________________________\n"
001115C1 | | call 6_3_2.array_loop.c.111023 | 自己定义PRINT_
001115C6 | | add esp,4 |
001115C9 | | push 77 | ascll码 == 'w'
001115CB | | push 3 | 数组长度
001115CD | | lea ecx,dword ptr ss:[ebp-14] |
001115D0 | | push ecx |
001115D1 | | call 6_3_2.array_loop.c.111046 | IterationArray函数地址
001115D6 | | add esp,C |
其次呢我们需要看一下数组是怎么定义的
数组的创建过程其实就是先开辟内存空间.然后将数据依次从栈顶往栈底写入.
而不同于堆栈先进后出的理念,或者是后进先出的理念(push 3 push 2 push 1)(pop 1 pop 2 pop3) 而是直接 对堆栈的这块内存进行操作
蓝色表示开辟的空间
红色表示数组实际用到的空间
为什么开辟的要多于使用的?? 这个问题估计和security_cookies这个函数有关
我也不清楚
说了那么多我们首先看一下数组遍历过程的汇编代码,这里因为我的两个循环都是写在一个函数里面,仅仅是做了对字符创的判断来区分使用哪个循环.所以看起来会比较难受所以循环的部分我重新写了一下
这样就比较好区分两个循环到底是怎么运行的了.
1.for循环
这里其实很好理解,就是说无论如何我们执行的代码都会会到函数头,在头部进行判断是否继续执行代码
2.while循环
其实while循环很大一部分要看你怎么去写,我这里写的和for其实差不多.
但是呢循环的本质都是差不多一样的,写法的不同,仅仅是稍小的差别
数组和循环的部分就到这里了
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦