我花了几个小时在调试问题上,只是为了让一个更有经验的人看看IL (比如00400089 mov dword ptr ebp-8,edx )并指出问题所在。老实说,这看起来像是希伯来语--我不知道它到底在说什么。
我在哪里可以学到更多关于这些东西的知识,并给我周围的每个人留下深刻的印象?我的目标是阅读下面这样的东西,并发表如下评论:是的,你有一个比赛条件。
.maxstack 2
.entrypoint
.locals init (valuetype [MathLib]HangamaHouse.MathClass mclass)
ldloca mclass
ldc.i4 5发布于 2010-09-08 09:03:57
要想更好地使用IL,可以从这篇奇妙的文章开始:Introduction to IL Assembly Language。虽然它说的是“介绍”,但它是你开始感到舒适的一切。
你需要的另一部分是练习和大量的练习。使用.NET Reflector并开始查看反汇编成IL的代码。(小贴士:当你去下载它的时候,你不需要提供一个真正的电子邮件。)另外,在Reflector中使用Reflexil插件。这是一个很好的起点:Assembly Manipulation and C# / VB.NET Code Injection。
不是必须的,但有一个好处: Reflexil是开源的。您可以获取源here。
发布于 2010-09-08 09:03:09
这不是MSIL,它是汇编语言80x86。
发布于 2010-09-08 09:20:53
我可以给你一个两边都有的答案。
一方面,没有什么比优秀的汇编语言技能更能教你如何真正操作一台计算机了。在某种程度上,MSIL是一种类似汇编的语言。不利的一面是,很少有机会再做这种开发了。
另一方面,求助于MSIL来解决问题并不一定是理解问题的最直接或最有教育意义的方式。在五年的.NET编程生涯中,我从来没有觉得有必要去那里。只有一次,一位同事(曾在微软从事编译器测试)带着我试图解决的问题去了那里,最后,他的答案具有误导性,因为真正的问题是基于CLR设计和约束的。更好地了解CLR和C#将导致更好的理解和真正的解决方案。
(如果你想知道,问题是我想使用"as“来实现泛型的安全类型转换。"as“不起作用,但"is”起作用。我的同事注意到"is“和"as”使用相同的MSIL。真正的问题是,"as“只适用于强制转换类,如果没有对泛型声明的适当约束,C#不知道您的泛型类型是否会成为类。事实上,我在泛型中使用的类型是值类型;"as“对这些类型根本不起作用。)
我强烈推荐Jeffrey Richter的书CLR via C#.,而不是去学习MSIL的技能。尽管我对C#进行了多年的钻研,但这本书仍然充满了启示--我从每一页都学到了一些东西。
https://stackoverflow.com/questions/3663876
复制相似问题