c語言基礎知識入門最全筆記(C語言基礎第一課)
2023-04-13 19:00:12
c語言基礎知識入門最全筆記?C語言第一課學習目標:1. 運行第一個C語言的程序,現在小編就來說說關於c語言基礎知識入門最全筆記?下面內容希望能幫助到你,我們來一起看看吧!

c語言基礎知識入門最全筆記
C語言第一課學習目標:
1. 運行第一個C語言的程序
2. 熟悉VC開發環境
3. C函數的格式
4. C函數的調用
5. 函數的反彙編分析——空函數
6. 函數的反彙編分析——簡單功能
7. 函數的反彙編分析——嵌套調用
運行第一個C語言的程序,熟悉VC開發環境
#include //頭文件
int main //程序入口點
{
printf("Hello Word!");
return 0;
}
C函數的格式
無參數、無返回值的函數格式
void 函數名
{
//代碼
}
有參數,無返回值的函數格式
void 函數名(參數類型 參數名,參數類型 參數名)
{
//代碼
}
裸函數
void __declspec(naked) Function
{
//此處可以無任何代碼
}
如何在C語言裡寫彙編
void __declspec(naked) Function
{
//通過彙編寫一個函數實現任意兩個數相加
__ASM
{
//提升堆棧
push ebp
mov ebp,esp
add esp,0x40
//保護現場
push ebx
push esi
push edi
//填充溢出緩衝區
mov ecx,0x10
mov eax,0xCCCCCCCC
lea edi,dword ptr ss:[ebp-0x40]
ret stos dword ptr es:[edi]
//實現功能
mov eax,dword ptr ss:[ebp 8]
add eax,dword ptr ss:[ebp c]
//恢復現場
pop edi
pop esi
pop ebx
//恢復原始堆棧
mov esp,ebp
pop ebp
//返回調用Call的下一行
ret
//平衡堆棧(假設傳了兩個參數)
add esp,0x8
}
}
調用約定
調用約定 參數壓棧順序 平衡堆棧
__cdecl 從右至左入棧 調用者清理堆棧
__stdcall 從右至左入棧 自身清理堆棧
__fastcall ECX/EDX傳遞前兩個參數,剩下的參數從右至左入棧 自身清理堆棧
觀察下列三個函數在彙編中參數是如何入棧的
例1.
int __cdecl plus1(int x,int y)
{
return x y;
}
例2.
int __stdcall plus1(int x,int y)
{
return x y;
}
例3.
int __fastcall plus1(int x,int y,int l,int k)
{
return x y l k;
}
,