每次下定决心研读《Inside Microsoft.NET IL Assembler》都因在敲完第一个例子之后不能得到预期的结果而放弃了。我遇到的问题是,不论输入的是数字,抑或是非数字,程序总是返回How rude,然后结束。这次我决定不再放弃了,我一定要找出原因,为什么作者能够正常运行,而我们这里就不行。最终让我找到了,在sscanf函数的声明中添加preservesig就能得到预期的效果,如下:
.method public static pinvokeimpl("msvcrt.dll" cdecl) vararg int32 sscanf(string,int8*) cil managed preservesig{}我猜想可能是作者当时使用的ILASM跟我们现在的不同了,我使用的是VS2010自带的ILASM,而作者这本书因该写于2002年前后,想来这期间ILASM有了修改也是正常的事情。抑或者作者犯了个错误,不知道了。反正加了preservesig就可以了!
希望想读这本书,而又遇见跟我同样问题的人,不要因为这个问题而止步。
本文探讨了在研读《InsideMicrosoft.NETILAssembler》时遇到的一个问题,即在敲完第一个例子后无法得到预期结果。作者通过添加preservesig参数解决了sscanf函数在不同版本ILASM中的兼容性问题,从而能够得到正确的输出。建议遇到类似问题的读者不要放弃,而是尝试理解并解决问题。
6324

被折叠的 条评论
为什么被折叠?



