注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

^_^ china.ygw的博客

软件开发/c/c++/数据库/开源/linux/windows/安全/网络...

 
 
 

日志

 
 
 
 

Windows及Linux下根据函数地址获取程序文件名称  

2011-12-01 20:51:39|  分类: c/c++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

       很多时候,我们需要依据函数地址获取对应的程序文件名称。特别是在程序日志处理时,需要在出错的时候记录一系列信息,以便查找问题时使用。

       在Windows上,我们可以通过VirtualQuery与GetModuleFileName接口进行,如下:

            wchar_t szFile[ccdMaxFileNameLength];

            MEMORY_BASIC_INFORMATION mbi;
            memset(&mbi, 0, sizeof(mbi));
            if (sizeof(mbi) != VirtualQuery(fnaddr, &mbi, sizeof(mbi))) {

                  错误处理

            }
            if (0 == ::GetModuleFileName((HMODULE)mbi.AllocationBase, szFile, _countof(szFile))) {
                  错误处理

            }

      调用成功后,szFile保存的就是函数地址fnaddr所对应的程序文件名称。

      但是在Linux下,以上方式就行不通了,此时需要用另外的处理方式,如下:

             Dl_info di;
             if (0 == dladdr(fnaddr, &di)) {
                   错误处理
             }

      成功后,di.dli_fname保存的就是函数地址fnaddr所对应的程序文件名称。

  评论这张
 
阅读(636)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018