• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 函数的首地址就是函数的名字,那如何知道函数的末地址?也就是说我想求函数体的大小该怎么办?

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

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 函数的首地址就是函数的名字,那如何知道函数的末地址?也就是说我想求函数体的大小该怎么办?等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 函数的首地址就是函数的名字,那如何知道函数的末地址?也就是说我想求函数体的大小该怎么办?
描述:

C/C++的 sizeof 好象不行,
在C/C++中怎么解决呀?汇编好象可以办到。
return 本身的地址怎么搞到?


解决方案1:

与后一个函数地址相减。

解决方案2:

还有一个不是办法的办法,就是用DLL,
申请两个导出函数,在用get得到函数地址,
这个地址就是内存直实址,用直实地址减就行

解决方案3:

函数都是一个一个靠在一起的,
用下一个函数的首地址 减一下试试,
或在后面建一个标示如 
goto flag
flag:
用这个地址减
不过这个还是汇编来的直接

解决方案4:

声明两个函数,关掉调式信息和优化,用后一个函数的地址减去前一个函数的地址

解决方案5:

我也觉得算是算不出来的,不同的编译器,或者同一个编译器,不同的参数,编译结果都不一样,返汇编,就很容易算出来了
如果非要用代码算,不知道进程或者dll加载后,操作系统里面有没有相关的数据

解决方案6:

我没其他的办法了,链接之前是不知道自己的函数编译成汇编的代码有多长的.

解决方案7:

写这样的代码,然后编译的时候选择输出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) 
看到联系了吧.这是最保守的估计方法.

解决方案8:

没办法,你不知道在什么时候结束,就算搜索ret指令都不成.
不过可以在编译的时候输出 map,那个可能能找到相关的东西.

解决方案9:

还有一个不是办法的办法,就是用DLL,
申请两个导出函数,在用get得到函数地址,
这个地址就是内存直实址,用直实地址减就行
============================
不一定吧,你确定这两个函数一定是连续存放的,一个接着一个.

解决方案10:

冒似不好搞哦,关注一个


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 函数的首地址就是函数的名字,那如何知道函数的末地址?也就是说我想求函数体的大小该怎么办?

相关文章

  • 2017-06-04 WTL问题!
  • 2017-06-04 为什么我在ATL的OnDraw中画不了线???????
  • 2017-06-04 关于mimefilter的问题
  • 2017-06-05 访问DLL中结构体问题
  • 2017-06-04 有会asynchronouspluggableprotocolhandlerAPPH的帮帮忙吗?谢谢。
  • 2017-06-04 如何从ColeVariant对象中取出以零结尾的字户串
  • 2017-06-05 我在看王艳平编著的《windows程序设计》(人民邮电出版社出的那本书)时遇到一个关于模块句柄的问题,请指教
  • 2017-06-05 怎么样单步调试dll工程
  • 2017-06-04 没分了!!!在activex控件中打开一个word进程,能不能把word关闭的消息传递到activex控件中
  • 2017-06-04 求教临时文件的问题?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • IIS7版本获取的问题
    • 把一个word文档的内容显示到view上
    • mfcactivex打印控件
    • 有关多线程中的内存问题
    • 求清晰的《vc技术内幕(第四版)》中文版
    • ActiveX求助
    • 老潘的“com原理”有个CFactory::LockServer(BOOLbLock)函数没有明白其含义,也没有看到谁调用了它?
    • 如何调用dll中的类和类的成员函数?
    • CompositeControl控件如何打印
    • 单文档应用程序IDispEventImpl

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有