【发布时间】:2019-05-30 12:01:38
【问题描述】:
我有来自一个客户的大量代码库,其开发人员拒绝提供代码。
我已经反编译了其中的大部分,尽管我在关注时遇到了问题
我正在使用 dnSpy, Just Decompile, dotPeek 来反编译代码。我也尝试用谷歌搜索并查看了 Stackoverflow,但找不到任何可以回答我的东西。如果有人能指出我正确的方向,我将不胜感激。
更新:我已经粘贴了完整的函数
public virtual string ParseDealerInventoryLink(string toParseLinkData)
{
string pattern = "{([^}]+)}";
string text = toParseLinkData;
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Compiled;
if (this != null && !string.IsNullOrWhiteSpace(text))
{
object dyn = new PropertyBag(this);
Regex regex = new Regex(pattern, options);
Dictionary<string, DealerInventoryLinkPatternParam> linkPatternMap = DealerInventoryFeedUrlParser.GetLinkPatternParamValueMap();
text = regex.Replace(text, delegate(Match mat)
{
if (mat.Success && mat.Groups.Count > 0)
{
Group group = mat.Groups[mat.Groups.Count - 1];
if (group.Success)
{
string value = group.Value;
if (linkPatternMap.ContainsKey(value))
{
if (DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site1 == null)
{
DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site1 = CallSite<Func<CallSite, object, string>>.Create(Microsoft.CSharp.RuntimeBinder.Binder.Convert(CSharpBinderFlags.None, typeof(string), typeof(DealerInventoryFeedUrlParser)));
}
Func<CallSite, object, string> target = DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site1.Target;
CallSite <>p__Site = DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site1;
if (DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site2 == null)
{
DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site2 = CallSite<Func<CallSite, Type, object, object>>.Create(Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember(CSharpBinderFlags.None, "ToString", null, typeof(DealerInventoryFeedUrlParser), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.UseCompileTimeType | CSharpArgumentInfoFlags.IsStaticType, null),
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)
}));
}
Func<CallSite, Type, object, object> target2 = DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site2.Target;
CallSite <>p__Site2 = DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site2;
Type typeFromHandle = typeof(Convert);
if (DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site3 == null)
{
DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site3 = CallSite<Func<CallSite, object, string, object>>.Create(Microsoft.CSharp.RuntimeBinder.Binder.GetIndex(CSharpBinderFlags.None, typeof(DealerInventoryFeedUrlParser), new CSharpArgumentInfo[]
{
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null),
CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.UseCompileTimeType, null)
}));
}
return target(<>p__Site, target2(<>p__Site2, typeFromHandle, DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site3.Target(DealerInventoryFeedUrlParser.<ParseDealerInventoryLink>o__SiteContainer0.<>p__Site3, dyn, linkPatternMap[value].ColumnName)));
}
}
}
return mat.Value;
});
}
return text;
}
【问题讨论】:
-
dynamic ParseDealerInventoryLink(string input) { return null; } string link = ParseDealerInventoryLink("");生成类似的代码。向我们展示稍后在您的代码中调用<>p__Site1会发生什么。
标签: c# decompiler