如何解决在Windows上,可以使用C ++从给定的函数ptr以编程方式获取Assembly的字符串名称
如果在调试器中通过功能ptr设置断点,您将在检查器面板中看到该程序集的名称。这似乎适用于所有函数对象,包括lambda。
您可能会看到类似的内容
Func=0x00FF00FF00{UE4Editor-Game.dll!<lambda_4b5336d9060965465490645>::<lambda_invoker_cdecl>}
问题;如何使用功能指针Func
和Windows开发环境中可用的功能以编程方式获取包含此处给出的程序集信息的字符串?
对于给定的示例,我将这样称呼;
const char* details = GetFunctionAssemblyString(Func);
我想获得的最重要的部分是这个; UE4Editor-Game.dll
但是完整的字符串也可能很有趣...
这仅用于开发工具,并且不打算跨平台使用,因此可以使用Windows特定功能。我可以访问调试数据库.pdb。
欢呼
解决方法
请注意,“汇编”是一个仅限于.net的术语,它表示带有元数据的映像文件(无论是exe还是dll或其他)。对于本机上下文,类似的术语是“模块”,一个模块可能具有或没有可用的符号名称,但是在通常情况下可能不会具有更多的符号名称。请注意,可能会有调试信息,但是可以将其删除,并且该模块将继续工作,如果从.net程序集中删除了元数据,情况就不会如此。
所有这些,您可以使用调试帮助库来获取有关本机进程的尽可能多的信息。请注意,SymInitialize中的注释听起来似乎使进程加载有关其自身的信息不可行。为特定进程初始化dbghelp后,可以使用SymFromAddr获取与特定地址关联的名称,然后使用SymGetModuleInfo64获取包含该地址的模块的信息。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。