# DllCallMeshAnalysis **Repository Path**: anxin1225/DllCallMeshAnalysis ## Basic Information - **Project Name**: DllCallMeshAnalysis - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-03-01 - **Last Updated**: 2025-01-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 调用分析工具 主要是通过反射,找到函数的IL代码,然后通过解析IL代码来做一些事情。 ## 找到函数被引用 一般情况下,我们改造某个函数的时候,得知道是不是真的有人在调用,然后判断要不要改造这个函数。 可以使用本项目中的 DllMethodCalledAnalysis45 来处理。 - 将项目中 DllMethodCalledAnalysis45 Program AnalysisQuote 中的SearchPath的路径调整成自己的路径 - 编译本项目 - 然后使用命令行工具启动 DllMethodCalledAnalysis45 -c `配置文件` 等待执行结束,你就能拿到调用层级的相关日志 配置文件 ``` { "FileName": "xxxxx.Controller.dll", "ProjectPath": "xxxx\\bin\\", "SearchPaths": [ "C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.5" ], "CheckName": "xxx.NativeRedis" } FileName: 要作为根解析的Dll或者exe文件 ProjectPath:项目的位置 SearchPaths:.net 框架的安装位置 CheckName:检查的关键字 ``` 日志Demo ``` xxxx.Web.Models.WebApiResultModel`1[xxxx.Web.Models.WebApiEmptyModel] UpdateTaskName(System.String, xxxx.Web.Models.Task.AddTaskModel, System.String) 函数 xxxx.Web.Models.WebApiResultModel`1[xxxx.Web.Models.WebApiEmptyModel] xxxx.ItalentTask.ESB.ServiceImp.OpenTaskProvider::UpdateTaskName() 包含RedisV1调用 0191 : callvirt instance int xxxx.TalentPortal.Model.ServiceInterface.ITaskProvider::UpdateTaskName() calltrue int xxxx.TalentPortal.Task.Services.TaskProvider::UpdateTaskName() 0163 : callvirt instance System.Boolean xxxx.TalentPortal.Model.Domain.Base.IRule::Validate() calltrue System.Boolean xxxx.TalentPortal.Model.Domain.Rules.AddWorkRule::Validate() 0022 : call instance System.Boolean xxxx.TalentPortal.Model.Domain.Rules.WorkRule::WorkParentParameterRule() 0058 : callvirt instance xxxx.TalentPortal.Model.Domain.ResultInfo`1[xxxx.TalentPortal.Model.Domain.WorkInfo] xxxx.TalentPortal.Model.ServiceInterface.IWorkProvider::GetWorkInfo() calltrue xxxx.TalentPortal.Model.Domain.ResultInfo`1[xxxx.TalentPortal.Model.Domain.WorkInfo] xxxx.TalentPortal.ServiceImp.Provider.WorkProvider::GetWorkInfo() 0217 : callvirt instance System.Boolean xxxx.TalentPortal.Model.Domain.Base.IRule::Validate() calltrue System.Boolean xxxx.TalentPortal.Model.Domain.Rules.AddTaskRule::Validate() 0014 : call instance System.Boolean xxxx.TalentPortal.Model.Domain.Rules.AddTaskRule::TenantParentTaskAddTaskRule() 0101 : callvirt instance xxxx.TalentPortal.Model.Domain.TaskInfo xxxx.TalentPortal.Model.ServiceInterface.ITaskProvider::GetTaskInfo() calltrue xxxx.TalentPortal.Model.Domain.TaskInfo xxxx.TalentPortal.Task.Services.TaskProvider::GetTaskInfo() 0081 : call instance xxxx.TalentPortal.Model.Domain.TaskInfo xxxx.TalentPortal.Task.Services.TaskProvider::GetTaskInfo() 0152 : call System.Collections.Generic.List`1[xxxx.TalentPortal.Model.Domain.TaskInfo] xxxx.TalentPortal.Task.Services.Services.CounterService::SetCounter() 0065 : callvirt instance System.Collections.Generic.List`1[xxxx.TalentPortal.Model.Domain.Counter] xxxx.TalentPortal.Model.ServiceInterface.ICounterProvider::Get() calltrue System.Collections.Generic.List`1[xxxx.TalentPortal.Model.Domain.Counter] xxxx.TalentPortal.ServiceImp.Provider.CounterRedisProvider::Get() 0788 : call instance System.Collections.Generic.List`1[xxxx.TalentPortal.Model.Domain.Counter] xxxx.TalentPortal.ServiceImp.Provider.CounterRedisProvider::GetV1() 0109 : callvirt instance System.Void xxxx.TalentPortal.Infrastructure.Cache.TitaRedisPiplineProvider::GetAllEntriesFromHash() 0085 : callvirt instance System.Void xxxx.NativeRedis.RedisPipelineProvider::GetAllEntriesFromHash() 0014 : call instance System.Void xxxx.NativeRedis.RedisPipelineProvider::CheckInPipeline() 0119 : callvirt instance System.Void xxxx.NativeRedis.RedisPipelineProvider::Flush() 0001 : call instance System.Void xxxx.NativeRedis.RedisPipelineProvider::CheckInPipeline() ``` # 功能引用 Dll 反射解析逻辑项目来源自:https://www.codeproject.com/Articles/14058/Parsing-the-IL-of-a-Method-Body