Visual Studio 2019 (16.5) 版本更新中带来了一项很小很难注意到却非常实用的功能,查看哪一个托管线程正在持有 .NET 对象锁。...---- 更新日志 Visual Studio 的官方更新日志中对此功能的描述: View which managed thread is holding a .NET object lock 即...功能入口 这个功能没有新的入口,你可以在“调用堆栈” (Call Stack) 窗口,“并行堆栈” (Parallel Stacks) 窗口,以及“线程”窗口的位置列中查看哪个托管线程正在持有 .NET...Call Stack 示例 现在我们就实际看一下这个功能的用法和效果。于是我写了一点下面的代码。...现在在 Visual Studio 2019 中运行这段代码,可以看到另一个线程是不可能获得锁的,于是不会输出最后那一句,其他都会输出。 ?
我让用户发送了事件查看器的日志过来,通过日志可以看到如下内容 错误应用程序名称: lindexi.exe,版本: 5.1.12.63002,时间戳: 0xedd2d687 错误模块名称: MSVCR100...混合调试可以同时调试这两种代码。即使进程完全不是 .NET 程序,也可以使用混合调试来调试 进入混合调试之后,需要等待 Visual Studio 自动分析。...调用堆栈是个好东西,调用堆栈是一个非常重要的内容,可以帮助我们了解到程序是如何运行的。通过调用堆栈可以看到程序是如何运行的,是从哪个函数开始的,是如何调用的,是如何返回的。...但是这个方法逻辑跑满了,其原因是什么呢?调用堆栈可无法回答此问题 试试先在 Visual Studio 里面打开内存、寄存器、反汇编窗格。...但是如果能够掌握这部分知识,那在调试问题时会有所帮助 继续和大家介绍 Visual Studio 的另一个调试工具——局部变量。局部变量也是个好东西,可以帮助我们了解到程序运行时的状态。
这样做的原因是大部分情况下,可以通过托管代码快速定位到卡住的问题,无需挂载本机调试来干扰调试 挂进去之后,现在的进程还在正常跑着,点一下暂停,看看 UI 主线程卡在哪里了 这个时候我习惯让 Visual...只开启本机调试的方式,可以展示出整个 CoreCLR 的执行过程,如此可以看到在加载的发起方 CoreCLR 的调用堆栈,进而了解到正在加载的程序集是哪个 再次附加调试就看到了 CoreCLR 发起加载程序集的堆栈了...点击进入 LoadLibraryExWrapper 这一行,此时我习惯让 Visual Studio 的调试界面一边是调用堆栈,一边是局部变量窗口。如此可以在切调用堆栈时,看到各个方法的局部变量情况。...此时我看到了有 path 变量,再点击 Visual Studio 的 调试->窗口->内存->内存1 选项卡,打开内存查看窗口。...注:下图是后面截的,导致线程号和后文的不匹配,还请大家略过 切换到对应的线程,查看堆栈,可以看到确实是正在加载 DLL 的过程中 也就是主线程的加载 DLL 卡住是因为正在等待这个线程完成 DLL 加载
如果收到与以下 dll 之一相关的错误,也需要满足上述要求: api-ms-win-crt-runtime-l1-1-0.dll api-ms-win-cor-timezone-l1-1-0.dll hostfxr.dll...如果你已安装 Visual Studio,则可以使用以下步骤检查你的版本。 打开 Visual Studio。 选择“帮助” > “Microsoft Visual Studio”。...从“关于”对话框中读取版本号。 Visual Studio 可安装最新的 .NET SDK 和运行时。...=0 使用此方法可以将多个版本安装到不同的位置,然后通过使用指向安装位置的环境变量运行应用程序来明确选择应用程序应使用哪个安装位置。...删除环境设置,让 .NET 在选择用于运行应用程序的最佳框架时考虑默认的全局安装位置。 默认值通常为 C:\Program Files\dotnet,这是安装 .NET 的安装程序所在的位置。
可移植性分析器作为 Visual Studio Extension 提供,用于分析每个项目的一个程序集;也可以作为 ApiPort 控制台应用提供,用于按指定文件或目录分析程序集。...可以通过 Visual Studio 中的“分析” > “可移植性分析器设置”对其进行配置,并选择目标平台,即选择 .NET 平台/版本,用于评估与当前程序集构建的平台/版本相比的可移植性差距 。...若要在 Visual Studio 中分析整个项目,请在“解决方案资源管理器”中右键单击该项目,然后选择“分析程序集可移植性” 。...查看和解释可移植性结果 报表中仅显示目标平台不支持的 API。 在 Visual Studio 中运行分析后,你将看到弹出的 .NET 可移植性报表文件链接。...此部分包含由你的经过分析的程序集引用的程序集列表(此列表未经过分析)。 如果它是你自己拥有的程序集,请将其包含在 API 可移植性分析器运行过程中,以便你可以获得详细的 API 级别可移植性报表。
当开发人员使用 Microsoft Visual C++ 开发应用程序时,如果在代码中调用了 C++ 标准库的函数或类,在编译时,编译器并不会把这些标准库的代码直接嵌入到可执行文件中,而是在运行时去加载相应的...因此,当用户在计算机上运行使用 Visual C++ 开发且依赖了相关标准库功能的程序时,系统需要找到并加载像 msvcp140.dll 这样的 DLL 文件,程序才能正常执行。...调试器Visual Studio Debugger提供断点调试、内存查看、调用栈分析、多线程调试等功能,支持本地/远程调试。...关键版本MSVC的版本通常与Visual Studio版本同步(如Visual Studio 2022对应MSVC 19.30+),其演进核心围绕“标准兼容性提升”“性能优化”和“平台扩展”展开,以下是几个里程碑版本...Visual C++ 运行库安装如果不确定缺哪个版本(比如玩老游戏经常要装一堆),可以找 “VC 运行库合集”(比如网上常见的 “VCRedistPack”),一次性打包了从 2005 到 2022 的主流版本
在《兜兜转转,我又开始研究 Windows 系统》一文中,我提到最近开始专注于研究在国产系统上兼容运行 Windows 应用程序。...通过 spy++,可以进行如下定位: 查看窗口结构 这是通过 wine 运行 spy++ 的窗口信息,可以看出,Spy++ 可以列出系统中所有正在运行的窗口,以树状显示窗口层次,可以非常清晰的看到窗口的父子关系...通过点开窗口的属性,在属性检查器中还可以查看窗口更详细的信息,包括坐标、窗口样式、窗口类、进程等信息。...首先我们从 Visual Studio 下复制可执行文件,比如我安装的 Visual Studio 2022 Community 版本,就在 C:/Program Files/Microsoft Visual...分析依赖关系:Dependencies 可以查看一个可执行文件或库文件依赖的所有 DLL 文件,包括它们的版本和路径。这对于检查程序是否缺少必要的动态库文件、查看程序所依赖的外部库非常有用。
我从一万二千年前开始写XAML,这么多年用了很多各式各样的工具,现在留在电脑里的、现在还在用的、在写WPF时用的也就那么几个。这篇文章总结了这些工具,希望这些工具可以让WPF开发者事半功倍。 1....可以分析应用程序准备 UI 框架(布局和呈现)以及为网络和磁盘请求提供服务所花费的时间,以及在应用程序启动、页面加载以及调整窗口大小等应用场景中花费的时间。 ?...不过我也很喜欢JustDecompile的“创建项目”功能,它可以直接反编译一个Dll并创建一个项目(如果不出错的话)。...虽然现在Visual Studio也可以做到差不多的功能,但Snoop依然是我最喜欢使用的WPF工具之一。 在以前我还喜欢用XAML Spy,可惜那个软件停止更新了。...DebugView DebugView是一个很古老但依然实用的工具,它可以查看应用程序或驱动程序输出的调试信息,而且不仅能查看本地机器,还可以查看远程机器的调试信息。
在线查杀环境 三、Visual Studio 安装和使⽤ 1. Visual Studio 安装 2....++还要复杂,在 C/C++中可以直接调用 Windows API,在 Python 中则要通过一层转化间接调用 Windows API,而且 Python 打包的程序报毒比较高,体积比较大。...如果发现文件特征码与病毒特征库中的某个病毒特征码相匹配,就判断该文件为病毒;部分杀软会在静态查杀时将程序放入沙箱中运行几秒的方式以检测程序是否是恶意程序。...在 EDR 中还会挂钩敏感的 Windows API,在程序调用到被挂钩的 API 时检查函数参数和调用栈以检测恶意程序。...上方的是内存窗口,输入地址可以查看其内存: 当我们将鼠标放到当前以执行的变量名上时,可以查看该变量地址和内容: 选择该变量并拖到内存窗口或在地址中直接输入变量名并回车就可以查看该变量内存: 可以看到 a
关于Chimera Chimera是一款带有EDR规避功能的自动化DLL侧加载工具,在该工具的帮助下,广大研究人员可以在渗透测试过程中,绕过EDR的检测并实现自动化DLL侧加载。...虽然DLL侧加载可以用于合法目的,例如加载程序运行所需的库,但也可以用于恶意目的。而攻击者通常可以通过利用用于加载DLL的合法应用程序中的漏洞,从而使用DLL侧加载技术在目标系统上执行任意代码。...该工具能够通过XOR并使用随机密钥来对Shellcode执行自动化加密,并创建可以导入到Visual Studio的模板镜像以创建一个恶意ELL。...[replace sleep time via waitable timers] : [可选] 设置一个新的休眠时间 (向右滑动,查看更多) Visual Studio项目配置 首先,我们需要使用...DLL模版创建一个新的Visual Studio项目: 将镜像导入到Visual Studio项目中,并选择“Build Customizations”进行自定义构建。
/网站... 13 练习4: 使用Visual Studio Code 开发ASP.NET Core 应用程序... 14 任务1:创建解决方案... 14 任务2:将项目添加到我们的解决方案中.......NET Core使用各种命令行工具来生成基架、构建和运行应用程序,同时可以使用 Visual Studio Code 进行编辑。...你需要下载和安装Visual Studio Code的C#扩展,你可以按照练习1的任务2来完成 练习1: 安装和配置.NET Core以及Visual Studio Code 扩展 在本练习中,您将了解安装和配置...安装vscode-nuget-package-manager 您可以在Visual Studio Code中界面安装这些扩展(选择菜单查看-扩展), 也可以使用 Ctrl + P, 然后输入 ext install...这意味着,当你学会如何使用工具,你可以从任何支持的平台上以同样的方式使用它。
但是从而有几个新问题: 如何知道缺少哪个dll?因为我实验了两台电脑,一台提示缺少msvcp140_1.dll,一台没有任何提示,最后发现是缺少VCRUNTIME140_1.dll。...2.3.5 查看单个事件 我们可以双击 Process Monitor 中的任意一条事件来查看其详细信息。...它默认以进程树的方式显示进程及子进程之间的关系(可开关)且以颜色进行区分让人一目了然 非常精确的 CPU 占用显示 提供替代任务管理器的选项,在 Windows XP/7/Vista/8/10 中都非常有用...4.2.3 TCPView TCPView 是用于查看当前 Windows 应用程序和服务连网状态的绝佳工具,通过它我们可以在图形界面中查看到类似使用 netstat 命令输出的大部分信息。...4.2.17 DiskView:显示磁盘结构 DiskView 小工具可以让你以图形界面的方式查看详细的磁盘驱动器结构并可以放大和缩小显示区块,甚至可以选择某个文件之后查看其在磁盘中存储的位置。
你很难分清楚:倒底哪些DLL是需要打包的,哪些DLL是系统自带的。而作为打包过程中的一个小步骤,我根本不需要知道这么多信息。这个时候,我们需要一个更加简洁明了的工具。...dumpbin就是今天要介绍的主角。 二、使用 dumpbin是随Visual Studio一起发布的,在Visual Studio的“本机工具命令行”中就可以直接使用。...使用的第一步就是打开Visual Studio的“本机工具命令行”: ? 这里我选择的是“VS2015 X64本机工具命令提示符”。...三、小结 dumpbin的IMPORTS参数是用来查看程序依赖的其他动态库的,这对于可执行程序exe和动态链接库DLL都是适用的。...EXPORTS则适用于DLL查看其导出的函数接口: image.png 结果照样重定位到output.txt中去了。
此存储库包含工具的Visual Studio项目文件(DLLHSC)、API钩子功能的项目文件(detour)、Payload项目文件以及针对x86和x64体系结构的已编译可执行文件。...DLLHSC实现了这个工具的核心功能,detour项目生成一个用于钩住API的DLL文件,Payload项目负责生成用作概念验证的DLL,广大研究人员可以测试可执行文件并查看是否可以通过搜索顺序劫持技术来加载它...该工具只报告从系统目录加载的不属于knowndll的模块,输出的结果为需要额外分析的线索。然后,分析员可以将报告的模块放在应用程序目录中,并检查应用程序是否加载了提供的模块。...编译和运行指南 如果你打算使用源代码来编译工具,我们建议你在Visual Code Studio 2019上进行操作。...此模式旨在提供可用作Payload载的DLL的验证,仅用于为分析人员提供潜在目标: 当以进程的形式启动时,-rt参数会将提供的可执行镜像加载到其地址空间中的模块打印出来: 项目地址:点击底部【阅读原文】
TinyTracer是一款功能强大的API调用跟踪工具,在该工具的帮助下,广大研究人员能够轻松实现API的调用跟踪。...(可以帮助找到封装模块的OEP); 5、支持基于RDTSC绕过反跟踪机制; 工具要求 Intel PIN Visual Studio(Windows) g++、make(Linux) 工具下载...Windows 在Windows平台上,我们需要使用Visual Studio( >= 2012)来编译和构建工具代码,当前版本的TinyTracer已在Intel Pin 3.28上进行过测试。...接下来,将克隆下来的代码拷贝到Pin根目录的\source\tools路径下,然后在Visual Studio中导入项目,并进行代码构建即可。...(向右滑动,查看更多) 我们也可以通过修改install32_64目录中的TinyTracer.ini和parameters.txt来启用或禁用某些功能。
.NET Core使用各种命令行工具来生成基架、构建和运行应用程序,同时可以使用 Visual Studio Code 进行编辑。...本实验将介绍如何开发.NET Core跨平台应用程序,以及如何在 Linux、OS X 和 Windows 上的 Visual Studio Code (code.visualstudio.com) 中编写代码...你需要下载和安装Visual Studio Code的C#扩展,你可以按照练习1的任务2来完成 练习1: 安装和配置.NET Core以及Visual Studio Code 扩展 在本练习中,您将了解安装和配置...安装vscode-nuget-package-manager 您可以在Visual Studio Code中界面安装这些扩展(选择菜单查看-扩展), 也可以使用 Ctrl + P, 然后输入 ext install...这意味着,当你学会如何使用工具,你可以从任何支持的平台上以同样的方式使用它。
---- 这个时候你就会接触到一些美妙的dll,比如user32.dll,kernal32.dll 当然这些是非托管的代码,我们在.net中无法直接使用,所以我们会需要使用PInvoke进行调用 于是你会使用...所以我们一步步来看如何将c++的MessageBox转化为我们C#中的签名 手把手PInvoke 首先打开Programming reference for Windows API -Microsoft...Docs,找到目标函数MessageBox 的介绍 我们可以在Requirements的DLL栏中看到User32.dll,这个就是我们在DllImport中所需要的dll的名称 ?...,里面聚集了各种pinvoke的写法,如果不清楚怎么使用,可以去其中查看 另外vs也带有pinvoke的插件,使用方法可以参见吕毅同学的博客使用 PInvoke.net Visual Studio Extension...Platform Invoke Examples - Microsoft Docs Passing Structures -Microsoft Docs 使用 PInvoke.net Visual Studio
既然坚持下来了,我就把学习的过程记录下来,也许以后自己的能用的到,可以方便查询。或许,有其他人也有同样的困扰,或许可以在我这里得到一些帮助,有帮助我当然很开心。...它就是一个 dll,包含一组访问 CLR 内部数据的接口函数,可以使我们使用 Windbg 调试器调试 Net 程序,解决程序问题的时候更简单。...代码案例:Example_1_1_1 1)、加载程序集 A、编译程序源码,生成 Dll 或者是 Exe 程序集,可以在拷贝地址,当然这是我的习惯,你可以选择 Windbg 查找文件也是可以的。...H、.hh 命令可以查看命令的帮助文档。 2.2、SOSEX SOSEX 这款 dll 也是分两个版本的,分别是:32位和64位。...Perfview 开始生成数据,可以观察状态栏,查看 Perfview 的动作。 还有很多数据,不能一一展示,大家可以自己动手测试下。我截了一张图,表示一下。
Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? 本文将直接从 csproj 文件格式的本质来看以上这些问题。...,Visual Studio 中就能有一个文件夹的显式,即便实际上这个文件夹可能不存在) ItemGroup 也可以放很多组,一样是为了提升可读性或者增加条件。...文件从 MSTest 的 NuGet 包中以链接的形式包含到项目中,并且此文件在 Visual Studio 的解决方案列表中不可见。...你可以自己去查看此文件中的内容,相信有以上 Target 的简单介绍,应该能大致理解其完成编译的流程。...——这只是 Visual Studio 做的事情。 在编译时,msbuild 或 Roslyn 还会重新做一遍上面的事情——毕竟这两个才是真正的编译器,可不是 Visual Studio 的一部分啊。
(3) 在Visual Studio的“开发人员命令提示”工具中直接运行midl命令。这会自动调用Visual Studio安装的midl.exe。...("{domain} ({port})"); Ok(()) } } 调用WPS的COM接口 生成IDL文件 以WPS文字为例,我们在类厂中可以找到kwps.Application...\WOW6432Node\TypeLib\{00020905-0000-4B30-A977-D214852036FF} 可以看到WPS文字的API接口信息,保存在wpsapi.dll中 wpsapi.dll...我们通过oleview.exe -> File ->View TypeLib,可以查看到WPS文字所有的API接口,对于微软Office亦是如此。...不仅我们可以看到它的接口,甚至还可以看到其反编译生成的idl代码: D:\Program Files\WPS Office\WPS Office\11.1.0.14036\office6\wpsapi.dll