static function เป็นอีกรูปแบบหนึ่งของ function แต่จะมีความพิเศษกว่า function ปกติตรงที่ เมื่อมีการ compile ด้วย compiler แล้ว static function จะสร้าง link สำหรับให้ code เรียกใช้โดยตรง ผิดกับ function ธรรมดา (ผมจะไม่พูดถึงว่า static function ต่างจาก function ธรรมดาอย่างไร ในแง่การใช้งาน เพราะในบทความนี้เราจะมุ่งเน้นไปที่ compiler จะเรียกใช้ static function ต่างจาก function ธรรมดาอย่างไร)
พูดแบบนี้คงจะไม่เห็นภาพ ยกตัวอย่างกันดีกว่า
#include <stdio.h>
int NormalAdd(int param_1,int param_2)
{
return param_1 + param_2;
}
static int StaticAdd(int param_1,int param_2)
{
return param_1 + param_2;
}
int main(int argc, char **argv)
{
printf("%d\n",NormalAdd(1,2));
printf("%d\n",StaticAdd(3,4));
return 0;
}
เมื่อนำไป compile แล้วได้ exe ออกมา (สมมติให้ชื่อว่า static_function_test.exe) จากนั้นเปิดด้วย Debugger ซึ่งในบทความเราจะใช้ OllyDbg ในการเปิด

![]()

จากรูปจะเป็น code assembly ในส่วนของการเรียกใช้ printf("%d\n",NormalAdd(1,2)); ใน winmain()


จากรูปจะเป็น code assembly ในส่วนของการเรียกใช้ printf("%d\n",StaticAdd(3,4)); ใน winmain()
จะเห็นว่า NormalAdd ธรรมดามีการสร้าง link ก่อนที่จะมีการไปเรียกใช้ code ของ NormalAdd จริงๆ ผิดกับ StaticAdd เมื่อมีการเรียกใช้จะกระโดดไปทำงานที่ code ของ StaticAdd เลย ไม่มีการสร้าง link เอาไว้ก่อน
