第十课 c语言3
1.编码
ASCII
标准的ASCII编码只需要七位,第八位在拓展ASCII编码使用
GB2312
2.局部变量和全局变量
第十一课 c语言4
1.内存图
2.逆向参数个数
3.简单逆向if代码
4.if...else...反汇编判断
练习示例
5.if..else if....else if..反编译判断
6、循环反汇编
for循环
while循环
do...while循环
作业
1、ebp+8,ebp+c
2、ebp-4
3、[004225c4]
4、如果[ebp+8]大于[ebp+c],则跳转到00401064,否则[ebp+c]与[ebp-4]相加,把结果放入全局变量[004225c4]
5、
1、分析参数
[ebp+8]a、[ebp+c]b
2、分析局部变量
[ebp-4]x、[ebp-8]y
3、分析全局变量
[004225c4]c
4、功能分析
x=c,y=2,若a>=b则y++,若a>=b则c=x+y,则否则c=y,
5、返回值分析
全局变量被修改
6、还原成c
int c;
int function(int x,int y)
{
int x = c;
int y = 2;
if(a>=b)
{
y++;
}
if(a>=b)
{
c = x+y;
}
else
{
c = y;
}
}
1、分析参数
[ebp+8]x、[ebp+c]y、[ebp+10]i
2、分析局部变量
[ebp-4]a、[ebp-8]b、[ebp-c]c
3、分析全局变量
无
4、功能分析
a=0,b=1,c=2,若x<=y,a=b-1且跳到00401123,否则(若y>=i则a=c+1且跳转00401123,否则(若x>i则a=b+c且跳转00401123,否则))最后00401123地址是return a+1
5、返回值分析
6、还原成c
int function(int x , int y , int i)
{
int a = 0;
int b = 1;
int c = 2;
if(x<=y)
{
a=b-1;
}
else if(y>=i)
{
a = c + 1;
}
else if(x>i)
{
a = b + c;
}
else
{
a = b + c - 1;
}
return a + 1;
}
http://lihuaxi.xjx100.cn/news/1334730.html?action=onClick
第十二课 c语言5(正向基础)
1.类型转换(movsx,movzx)
小转大
- movsx使用符号位先填上,再把数据传过去
- movzx使用0先填上,再把数据传过去
大转小
表达式
- 运算中表达式会以最大宽度存放数据
- 当表达式同时存在有符号数和无符号数时,表达式的结构将转换成无符号数
疑点
海哥这里讲乱了,是因为%d是有符号输出,想要输出无符号要用%u
2.循环
- for循环执行顺序
作业
尝试运行后解释其运行结果
1、
从ebp-14开始存,到ebp-4是数组最后一个值,越界一个数组将存到ebp,越界两个数组将存到ebp+4,也就是eip的地址
2、