[學習筆記]用匯編語言編寫一個函數 實現兩個數相加

C函數:

int add(int nNumA, int nNumB)
{
	return nNumA + nNumB;
}

int _tmain(int argc, _TCHAR* argv[])
{
	
	add(3, 4);

	system("pause");
	return 0;
}

彙編語言實現:


執行過程:

執行前棧狀態:

首先執行 push 0x4

push 0x3

執行後棧中內容

再執行 call 00415FD7 (調用函數,並將返回地址入棧)

執行後棧中內容

其中 00415FFA爲返回地址

再執行 push ebp (將ebp入棧,保存其內容)

執行後棧中內容

再執行 mov     ebp,esp

sub     esp,0xC (esp減12,開闢棧空間(大小按需))

執行後棧中內容

再執行 xor     eax,eax

add     eax,dword ptr ss:[ebp+0x8]

add     eax,dword ptr ss:[ebp+0xC]

此時運算結束,結果7保存在eax中

再執行 mov     esp,ebp (釋放掉之前開闢的空間)

執行後棧中內容

再執行 pop     ebp (恢復ebp)

執行後棧中內容

再執行 retn    0x8 (按照棧中的返回地址返回,並將esp加8)

執行後棧中內容

至此,運算完成,運算結果7保存在eax中,同時EIP指向之前保存的返回地址(00415FFA

執行後棧狀態:

並且棧、ebp、esp都已恢復到運算前的狀態,保持了棧的平衡





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章