【问题标题】:Get function parameters name visual studio获取函数参数名称visual studio
【发布时间】:2014-01-03 23:54:42
【问题描述】:

我正在尝试从 Visual Studio 中编译的损坏函数中获取参数列表和返回类型。

我知道我可以使用

UnDecorateSymbolName(function.c_str(), undecoratedName, 200, UNDNAME_COMPLETE))

但这只是给了我另一个字符串,我必须弄清楚该字符串是否以返回类型或说明符开头。

有没有返回 SymbolNameInfo 的函数?类似的东西:

struct SymbolInfo
{
    char[255] symbolName
    char[255] returnType
    char[255] parameters
};

【问题讨论】:

  • 什么是“错位”函数? :)
  • @ChrisLava 你可以阅读它here
  • 每天学习新东西。在这里,我认为它肯定是一个错字。

标签: c++ visual-c++


【解决方案1】:

我设法找到了答案。这并不完美,也许其他人会有更好的主意。

我所做的是使用

UnDecorateSymbolName(function.c_str(), undecoratedName, 200, UNDNAME_COMPLETE))

使用不同的标志。

我用来解释的标志:

UNDNAME_COMPLETE // this returns the whole undecorated name.
UNDNAME_NAME_ONLY // this return just the name of the symbol
UNDNAME_NO_FUNCTION_RETURNS // this return a string like UNDNAME_COMPLETE 
                            // but without the return type

我使用这 3 个标志来执行以下操作:

  1. 为了获得名称,我只使用了 UNDNAME_NAME_ONLY。
  2. 为了获得返回类型,我做了一个以 NO_FUNCTION_RETURNS 结尾的 COMPLETE 子字符串
  3. 为了获取参数,我做了一个 COMPLETE 的子字符串,从 NAME 的末尾开始,到 COMPLETE.size() 结束

测试后的样子:

function : ?encrypt@@YAPADPAD@Z 
fullName : char * __cdecl encrypt(char*)

SymbolInfo.name : encrypt 
SymbolInfo.returnType : char *
SymbolInfo.parameters : (char *)

【讨论】:

    【解决方案2】:

    获得未损坏名称的最简单方法可能是使用与 Visual Studio 一起安装的 Microsoft 的 undname.exe

    要以编程方式进行,请查看例如(http://code.google.com/p/pdbparse/source/browse/trunk/src/undname.c)*.

    以上两个引用了谷歌搜索一分钟左右的结果。 ;-)


    *:只是希望一些乐于助人的熊不会出现在我鼻子上拍打那只感知到的苍蝇,但他们总是这样做

    【讨论】:

    • 问题是,如何将得到的字符串转化为语义信息。您建议的两个工具都可以完成 OP 已有的功能。
    • @IInspectable:您再次混淆和混淆,现在与“已经拥有”。在发布此答案时,OP 没有任何内容。我猜(毫无根据的)downvote 是你的。
    • @IInspectable 不,问题是除了我提供的之外,是否还有其他方法可以获取语义信息。
    • @Cheersandhth.-Alf 似乎这是我已经在使用的库的来源。我认为没有任何可用的函数可以返回我想要的。
    • @BartlomiejLewandowski:哦,看来你用的是微软的UnDecorateSymbolNameundname.c 源代码实现几乎相同,但包括您认为合适的所有内部组件。我不知道哪个先出现,但我猜undname.c 是逆向工程(对自己做这件事很有用,具有任何所需的功能)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多