⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 func.cs

📁 VB杀手 v1.0.2007.1210(附源码)
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.InteropServices;

using FUNCDESC = System.Runtime.InteropServices.ComTypes.FUNCDESC;
using INVOKEKIND = System.Runtime.InteropServices.ComTypes.INVOKEKIND;
using FUNCFLAGS = System.Runtime.InteropServices.ComTypes.FUNCFLAGS;

namespace IDLTest
{
    /// <summary>
    /// 函数
    /// </summary>
    class Func
    {
        #region 属性
        public INVOKEKIND InvokeKind
        {
            get { return fd.invkind; }
        }

        /// <summary>
        /// 在 VTBL 中的偏移量
        /// </summary>
        public short OffVft
        {
            get { return fd.oVft; }
        }

        /// <summary>
        /// 函数名
        /// </summary>
        public String Name;

        public override string ToString()
        {
            String s = "[" + Address.ToString("X") + "+" + OffVft.ToString("X") + "] ";
            s += "[" + FuncAddress.ToString("X") + "] ";
            s += Name;
            s += " (";
            if (fd.cParams > 0) s += fd.cParams.ToString();
            s += ") ";
            switch (InvokeKind)
            {
                case INVOKEKIND.INVOKE_FUNC:
                    s += "[方法]";
                    break;
                case INVOKEKIND.INVOKE_PROPERTYGET:
                    s += "[Get]";
                    break;
                case INVOKEKIND.INVOKE_PROPERTYPUT:
                    s += "[Set]";
                    break;
                case INVOKEKIND.INVOKE_PROPERTYPUTREF:
                    s += "[Ref]";
                    break;
                default:
                    s += "[未知]";
                    break;
            }
            if (((FUNCFLAGS)fd.wFuncFlags & FUNCFLAGS.FUNCFLAG_FHIDDEN) != 0) s += " [隐]";
            return s;
        }

        /// <summary>
        /// 地址
        /// </summary>
        public IntPtr Address
        {
            get
            {
                if (info.BaseAddress == IntPtr.Zero) return IntPtr.Zero;
                return (IntPtr)(info.BaseAddress.ToInt32() + OffVft);
            }
        }

        public IntPtr FuncAddress
        {
            get { return Address == IntPtr.Zero ? IntPtr.Zero : Marshal.ReadIntPtr(Address); }
        }

        /// <summary>
        /// 函数名
        /// </summary>
        public String FuncName
        {
            get
            {
                if (InvokeKind == INVOKEKIND.INVOKE_PROPERTYGET)
                    return "Get_" + Name;
                else if (InvokeKind == INVOKEKIND.INVOKE_PROPERTYPUT)
                    return "Set_" + Name;
                else if (InvokeKind == INVOKEKIND.INVOKE_PROPERTYPUTREF)
                    return "Ref_" + Name;
                else
                    return Name;
            }
        }
        #endregion

        #region 原有属性
        public FUNCDESC fd;

        public TypeInfo info;
        #endregion

        #region 构造函数
        public Func(IntPtr ip)
        {
            if (ip == IntPtr.Zero) return;
            fd = (FUNCDESC)Marshal.PtrToStructure(ip, typeof(FUNCDESC));
        }
        #endregion
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -