函数的首地址就是函数的名字,那怎么知道函数的末地址?也就是说小弟我想求函数体的大小该怎么处理

函数的首地址就是函数的名字,那如何知道函数的末地址?也就是说我想求函数体的大小该怎么办?
C/C++的   sizeof   好象不行,
在C/C++中怎么解决呀?汇编好象可以办到。

return   本身的地址怎么搞到?

------解决方案--------------------
函数都是一个一个靠在一起的,

用下一个函数的首地址 减一下试试,


或在后面建一个标示如

goto flag

flag:

用这个地址减

不过这个还是汇编来的直接
------解决方案--------------------
冒似不好搞哦,关注一个
------解决方案--------------------
还有一个不是办法的办法,就是用DLL,

申请两个导出函数,在用get得到函数地址,

这个地址就是内存直实址,用直实地址减就行
------解决方案--------------------
还有一个不是办法的办法,就是用DLL,

申请两个导出函数,在用get得到函数地址,

这个地址就是内存直实址,用直实地址减就行
============================
不一定吧,你确定这两个函数一定是连续存放的,一个接着一个.
------解决方案--------------------
没办法,你不知道在什么时候结束,就算搜索ret指令都不成.
不过可以在编译的时候输出 map,那个可能能找到相关的东西.
------解决方案--------------------
写这样的代码,然后编译的时候选择输出map文件.link选项 里面
int func(int x,int y)
{
return x+y;
}
int main(int , char* [])
{
cout < <func(10,2) < <endl;
return 0;
}
然后打开输出的map文件就可以看到
0001:000007e0 ?func@@YAHHH@Z 004017e0 f test.obj
0001:000007f0 _main 004017f0 f test.obj
这是对应的汇编代码
int func(int x,int y)
{
004017E0 push ebp
004017E1 mov ebp,esp
return x+y;
004017E3 mov eax,dword ptr [x]
004017E6 add eax,dword ptr [y]
}
004017E9 pop ebp
004017EA ret
--- No source file -------------------------
004017EB int 3
004017EC int 3
004017ED int 3
004017EE int 3
004017EF int 3
--- d:\visual studio 2005\projects\test\test\test.cpp --------------------------
int main(int , char* [])
{
004017F0 push ebp
004017F1 mov ebp,esp
cout < <func(10,2) < <endl;
004017F3 mov eax,dword ptr [__imp_std::endl (402040h)]
004017F8 push eax
004017F9 push 2
004017FB push 0Ah
004017FD call func (4017E0h)

看到联系了吧.这是最保守的估计方法.
------解决方案--------------------
我没其他的办法了,链接之前是不知道自己的函数编译成汇编的代码有多长的.

------解决方案--------------------
与后一个函数地址相减。
------解决方案--------------------
我也觉得算是算不出来的,不同的编译器,或者同一个编译器,不同的参数,编译结果都不一样,返汇编,就很容易算出来了

如果非要用代码算,不知道进程或者dll加载后,操作系统里面有没有相关的数据
------解决方案--------------------
声明两个函数,关掉调式信息和优化,用后一个函数的地址减去前一个函数的地址