/*
從buf所指記憶體區域的前count個位元組查詢字元ch。
說明:當第一次遇到字元ch時停止查詢。如果成功,返回指向字元ch的指標;否則返回null。
*//#include "stdafx.h"
#include void *pmesch(void *buf , int ch , int count);
int main(int argc, char* argv)
else
printf("查詢失敗\n");
return 0;
}void *pmesch(void *buf , int ch , int count)
temp_buf++;
} return 0;
}
函式很簡單,不說了,直接od反彙編分析:
00401000 /$ 83ec 08 sub esp,8 ; 移動棧頂指標,給變數分配記憶體空間
00401003 |. a1 48704000 mov eax,dword ptr ds:[407048]
00401008 |. 66:8b0d 4c704>mov cx,word ptr ds:[40704c] ; cx=ef
0040100f |. 8a15 4e704000 mov dl,byte ptr ds:[40704e] ; 設定控制台終端型別
00401015 |. 894424 00 mov dword ptr ss:[esp],eax
00401019 |. 6a 04 push 4
0040101b |. 8d4424 04 lea eax,dword ptr ss:[esp+4] ; 將eax由存放abcd的值變為存放abcd的首位址
0040101f |. 6a 63 push 63
00401021 |. 50 push eax
00401022 |. 66:894c24 10 mov word ptr ss:[esp+10],cx ; 將ef存到abcd位址後面
00401027 |. 885424 12 mov byte ptr ss:[esp+12],dl
0040102b |. e8 30000000 call memch.00401060
00401030 |. 83c4 0c add esp,0c ; 堆疊平衡
00401033 |. 85c0 test eax,eax
00401035 |. 74 13 je short memch.0040104a
00401037 |. 68 3c704000 push memch.0040703c
0040103c |. e8 4f000000 call memch.00401090
00401041 |. 83c4 04 add esp,4
00401044 |. 33c0 xor eax,eax
00401046 |. 83c4 08 add esp,8
00401049 |. c3 retn
0040104a |> 68 30704000 push memch.00407030
0040104f |. e8 3c000000 call memch.00401090
00401054 |. 83c4 04 add esp,4
00401057 |. 33c0 xor eax,eax
00401059 |. 83c4 08 add esp,8
0040105c \. c3 retn
0040105d 90 nop
0040105e 90 nop
0040105f 90 nop
00401060 /$ 8b4c24 0c mov ecx,dword ptr ss:[esp+c] ; count=4
00401064 |. 8b4424 04 mov eax,dword ptr ss:[esp+4] ; eac存放a位址
00401068 |. 8bd1 mov edx,ecx ; while(count--) edx=4
0040106a |. 49 dec ecx ; ecx=3
0040106b |. 56 push esi
0040106c |. 85d2 test edx,edx ; while迴圈的判斷條件,只要edx!=0,zf=0;
0040106e |. 74 10 je short memch.00401080
00401070 |. 8a5424 0c mov dl,byte ptr ss:[esp+c] ; dl=c
00401074 |> 3810 /cmp byte ptr ds:[eax],dl ; 判斷指標所指位置值是否為c
00401076 |. 74 0a |je short memch.00401082
00401078 |. 40 |inc eax
00401079 |. 8bf1 |mov esi,ecx
0040107b |. 49 |dec ecx
0040107c |. 85f6 |test esi,esi
0040107e |.^ 75 f4 \jnz short memch.00401074
00401080 |> 33c0 xor eax,eax
00401082 |> 5e pop esi
00401083 \. c3 retn
總是反彙編這種簡單的沒意思,打算加大難度了。噎死。。。 部分C庫函式重寫以及反彙編分析之memset
函式解釋 將s中前n個位元組替換為ch並返回s memset 作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法。include stdafx.h void pmemset void s char ch int n int main int argc,char...
C 反彙編 if語句分析
include void main std cout hello world 7?1 4 if b 1 std cout b equal 1 判斷語句有幾種 1.條件表示式 表示式1?表示式2 表示式3 2.if語句 3.switch語句 首先來分析if語句吧 debug版 0040117d 68 ...
C 遞迴函式反彙編
源 include using namespace std int sumrecursion int arr,int n return 0 int main int sum sumrecursion arr,5 cout sum sum endl 反彙編 重要部分已經注釋,可以看到.text 004...