這個問題只要知道function的結束位址就能解決,
所以要想辦法在function結尾做出一個label,
一個方法如下:
int foo(void)
{
char gg = 1;
//
// function body
//
if(gg) return(1);
#pragma asm
foo_last:
PUBLIC foo_last
#pragma endasm
}
這樣就可在function結尾處安置了一個label.
而gg的目的是要騙compiler最佳化不要把 return() 後的東西化簡掉.
有了foo_last後, 就可用下列方法算出function size:
宣告:
extern int foo(void);
extern void * foo_last(void);
計算:
len = (unsigned char code *)foo_last - (unsigned char code *)foo;