首页
社区
课程
招聘
[原创] .net 方法头自动分析
发表于: 2012-6-25 13:35 5612

[原创] .net 方法头自动分析

2012-6-25 13:35
5612

好久没写过c#代码了 今天研究.net 自己动手写了一个 方法头自动分析玩具
private void btnParse_Click(object sender, EventArgs e)
        {
            //获取数据 去掉非16进制字符
            string methodHead = txtText.Text.Trim().ToUpper ();
            StringBuilder sb = new StringBuilder();
            foreach (char c in methodHead)
            {
                if (Char.IsNumber(c))
                {
                    sb.Append(c);
                }
                else if(c>='A' && c<='F')
                {
                    sb.Append(c);
                }
            }

            methodHead = sb.ToString();

            //转换成字节数组
            byte[] nums = new  byte[methodHead.Length /2];

            for (int i = 0; i < nums.Length; i++)
            {
                nums[i] = Convert.ToByte(methodHead .Substring (i*2,2), 16);
            }

            //分析方法头数据
            byte methodType = (byte)(nums[0] & 3);
            if (methodType == 2)
            {
                // Tiny 头
                int codeSize = nums[0] / 4;
                //输出信息
                sb.Clear();
                sb.AppendFormat("{0}\r\n",txtText.Text);
                sb.AppendFormat("Tiny Method \r\nCodeSize: {0}", codeSize);
                txtText.Text = sb.ToString();
            }
            else if (methodType == 3)
            {
                // Fat 头
                UInt16 flagAndSize = BitConverter.ToUInt16(nums, 0);
                UInt16 flag = (ushort)(flagAndSize &0x0FFC);
                flag /= 4;
                int headSize = flagAndSize>>12;
                bool bHasException = ((flag & 2) !=0);
                bool bInitLocal = ((flag & 4) !=0);

                int maxStack = BitConverter.ToUInt16(nums, 2);
                int codeSize = BitConverter.ToInt32(nums, 4);
                uint localVarSigTok = BitConverter.ToUInt32(nums, 8);

                sb.Clear();
                sb.AppendFormat("{0}\r\n", txtText.Text);
                sb.AppendFormat("Fat Method \r\n"
                    +"头大小:{0}\r\n"
                    +"异常处理:{1}\r\n"
                    +"自动初始化局部变量为0:{2}\r\n"
                    +"栈深度:{3}\r\n"
                    + "IL字节数:{4} Hex({4:X2})\r\n"
                    +"局部变量签名标记:{5:X8}\r\n",
                    headSize,bHasException ,bInitLocal ,maxStack ,codeSize ,localVarSigTok );
                txtText.Text = sb.ToString();
            }
        }


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 6
支持
分享
最新回复 (1)
雪    币: 107
活跃值: (404)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
有什么实用价值么???????????

没弄个bin直接下载玩玩?
2012-6-25 14:21
0
游客
登录 | 注册 方可回帖
返回
//