IL操作码修改

时间:2010-02-03 02:11:21

标签: .net vb.net il opcodes

语言:VB.NET 3.5

IL操作码:

    718 ldarg.0 
    719 callvirt    System.Windows.Forms.Button RClient.RClient::get_cmd1()
    724 ldarg.0 
    725 ldfld       System.String[] RClient.RClient::ButtonStrings
    730 ldc.i4.5    
    731 ldelem.ref  
    732 callvirt    System.Void System.Windows.Forms.ButtonBase::set_Text(System.String)
    737 ldarg.0 

对应于:

Me.cmd1.Text = Me.ButtonStrings(5)

至少我相信它确实如此。 我需要对IL进行哪些更改才能反映出来:

Me.cmd1.Text = "some string"

1 个答案:

答案 0 :(得分:3)

ldarg.0 
callvirt    System.Windows.Forms.Button RClient.RClient::get_cmd1()
ldstr      "some string"
callvirt    System.Void System.Windows.Forms.ButtonBase::set_Text(System.String)

第1行将Me推入堆栈。第2行执行方法get_cmd1,该方法对应于堆栈顶部对象的属性cmd1的getter。因此,这一行从堆栈顶部的对象推送getter cmd1的结果,在进程中弹出堆栈的顶部。第3行在字符串上推送字符串"some string"。此时堆栈的顶部是字符串"some string",堆栈中的下一个项目是Me.cmd1。第4行执行方法set_Text,其中字符串参数是堆栈的顶部。这对应于堆栈中第二个项目的Text的setter。堆栈中的第二项是Me.cmd1。所以这些行等同于Me.cmd1.Text = "some string"