第十課 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、