这个问题只要知道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;