自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(169)
  • 资源 (9)
  • 收藏
  • 关注

原创 .NET8 AOT和JIT的性能,谁更高呢?

一:有人问:.NET8 AOT和JIT的性能,谁更高呢?原文:.NET8 AOT和JIT的性能,谁更高呢?其实这个答案非常明显,那就是JIT的性能更高。为什么?原因在哪?因为JIT是随时可能分层编译,动态PGO,CHRL,Non GC Heap,OSR。Quick等极致的优化措施(关于这些措施,可以参考公众号(jianghupt)之前的文章,有详细描述)。只要触发了这些优化的条件。但是A...

2023-12-13 09:42:00 385

原创 2023年最新.Net面试题,看看你会多少

跟身边业内朋友讨论如今的现状,对于技术,经验,能力缺乏的。不仅工作越来越难找,面试的机会也少了很多。对于一些刁钻的面试官,他们喜欢问各种稀奇古怪的问题。45.CLR的内存映射(EnableWriteXorExecute)的作用主要是什么。48.基础类型优化,循环克隆优化,矢量化优化分别是什么,如何优化的。28.分层编译,OSR,GDV,常量分别是如何做到极致优化的。31.GCInfo,EHinfo是如何运行和解码的。18.托管堆,堆段,区域,分配上下文,都是什么。.GC计划阶段的二叉树是如何构建的。

2023-11-04 13:16:12 227

原创 .Net8 AOT+VMP简单的逆向分析

1.前言测试下VMP加密.NET的强度,选了最新的.Net8+AOT编译,用VMP给它加壳。最后逆向下,简单的分析,本篇看下。2.概述一.前奏首先一段简单的C#代码:namespace Test_{ internal class Program{ static void Main(string[] args) { Console.Writ...

2023-09-10 15:19:00 1162

原创 .Net8顶级技术:边界检查之IR解析(二)

前言IR技术应用在各个编程语言当中,它属于JIT的核心部分,确实有点点麻烦。但部分基本明了。本篇通过.Net8里面的边界检查的小例子了解下。前情提要,看这一篇之前建议看看前一篇:点击此处,以便于理解。概括1.前奏先上C#代码:[MethodImpl(MethodImplOptions.NoInlining)]private static bool Test(int[] array)...

2023-05-24 08:11:00 418

原创 Java/.Net双平台核心,Jvm和CLR运行异同点

可以看到generate_call_stub和call_stub两者在create_vm函数处分为两处,首先调用了generate_call_stub对函数进行了编译,再调用call_stub对编译好的函数进行了调用。_call_stub_entry里面包含了需要运行函数的函数头地址,在call_stub里面进行地址跳转调用。JVM事先把需要运行的函数编译好存放在某个地址,此后通过呼叫桩(call_stub)进行调用,这里的某个地址里面包含了需要运行的函数头地址,在里面跳转运行。先看JVM,它的调用如下。

2023-03-03 13:15:16 399

原创 .Net 7 CLR和ILC编译函数过程

随着研究深入,发现CLR编译函数与ILC编译是两种不同的截然方式,除了JIT部分编译一样,其它部分貌似完全不一。本篇来梳理这些东西。wx公众号:江湖评谈。

2022-12-12 19:55:51 351

原创 .Net 7里的函数.Ctor和.CCtor是干啥用的呢?你知道吗

楔子有小伙伴被面试官问到这个问题,本篇彻底解析下这个问题。为了彻底点,注意本篇是最底层的.Net 7 RC CLR运行模型(汇编)为基础进行全局剖析,局部业务分析。如有疏漏,请斧正。目的非手段这两个函数比较特殊的存在,.Ctor是非静态默认实例化。.CCtor是静态默认实例化。这两个函数伴随着.Net 任何对象的实例化都自动存在于这个对象当中。跟踪.CCtor可以在全局静态对象下断点...

2022-11-08 10:08:00 693

原创 Substring 在BCL和CLR里面搞了啥

楔子还是做点事情,不要那么散漫。本文以简单的Substring(int startindex,int Length)函数为例,来递进下它在托管和非托管的一些行为。以下均为个人理解,如有疏漏请指正。定义和实现它的定义是在System.Runtime.dll里面public string Substring(int startIndex, int length){ throw n...

2022-11-07 12:23:00 294

原创 .Net CLR异常简析

楔子前面一篇研究了下C++异常的,这篇来看下,CLR的异常内存模型,实际上都是一个模型,承继自windows异常处理机制。不同的是,有VC编译器(vcruntime.dll)接管的部分,被CLR里面的函数ProcessCLRException接管了。注意:这里面省略了一部分不必要赘述的细节问题,版本号分别为(CLR PreView 7和vcruntime 14.0)C++异常栈vcrun...

2022-10-12 08:25:00 395

原创 windows C++ 异常调用栈简析

楔子以win11 + vs2022运行VC++ 编译观察的结果。如果安装了Visual Studio 2022,比如安装在D盘,则路径:D:\Visual Studio\IDE\VC\Tools\MSVC\14.33.31629下面包含了vcruntime.dll的源码,主要VC编译器和ntdll.dll 以及KernelBase.dll交互。注:本篇不叙述正常的windows用户态和...

2022-10-11 14:52:00 777

原创 GC plan_phase二叉树挂接的一个算法

楔子在看GC垃圾回收plan_phase的时候,发现了一段特殊的代码,仔细研究下得知,获取当前数字bit位里面为1的个数。通过这个bit位为1的个数(count),来确定挂接当前二叉树子节点的一个地方。算法size_t logcount (size_t word){ //counts the number of high bits in a 16 bit word. a...

2022-10-09 14:17:00 193

转载 4年前的最佳小说回顾

古代有一小姐,遇到一个上京赶考的穷书生避雨,发现其很有才华后,掏出一些银两,并以身相许,次日小姐垂泪送书生:“君若高中莫负妾身。”书生发誓后走了。小姐让丫环把书生的名字纪录在册,丫头说:“这已经是第五十个书生了!”小姐说:“没办法,总有一个会真的考上的。——2016最佳小说《风投》书生让书童把小姐的名字记下,感叹道:这是第一百个了啊。——2016最佳小说《融资》书生的伴读童子问书生:公子,自从三年前你离家,如今已经睡了九十余名女子了,我们在各大赴京路上往复,难道就不去赶考了吗?书生答:赶考当大官不也

2020-12-22 15:38:17 386

原创 C++ 桌面图标(转载)

#include<windows.h>#include<commctrl.h>#include <stdio.h>typedef struct tagLVITEM64A{ UINT mask; int iItem; int iSubItem; UINT state; UINT stateMask; INT64 pszText; int cchText...

2020-12-04 15:09:00 1788

原创 .Net 5的 Span结构内存分析

假如说有一下程序使用了Span:static void Main(string[] args){Span span = new byte[10] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };span = span.Slice(5, 2);GC.Collect();Console.WriteLine(span.Length);Console.ReadLine();}分析如下:span数组在内存的存储布局断点到此处,并打印出 rbp 寄存器内容span结构体的地

2020-11-15 12:25:21 495

原创 windbg调试入门(转载)

  好不容易把环境打好了,一定要试试牛刀。我创建了一个极其简单的程序(如下)。让我们期待会有好的结果吧,阿门!  using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Progra...

2020-11-07 11:04:00 249

原创 Ubuntu 安装 Docker (转载)

在Ubuntu中安装Docker和docker的使用1.在Ubuntu中安装Docker更新ubuntu的apt源索引sudo apt-get update安装包允许apt通过HTTPS使用仓库sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ so...

2020-10-31 21:17:00 159

原创 GC析构对象和列表的处理过程

步骤如下:1.CLR 会判断当前对象是否包含析构函数,2.如果包含,则记录对象的地址到所属区域下的析构对象列表中3.在CLR GC的五个阶段的标记阶段,会判断对象是否存活为14.如果不为1,检查对象头中的一直运行析构函数标记是否为15.如果为1,则删除析构对象列表的中的记录6.如果不为1,则把析构对象列表中的记录移动到析构队列或者重要析构队列7.标记析构队列和重要析构队列的对象为存活对象,即为18.等待被析构函数的调用线程调用它9.移除析构队列或者重要析构队列10.下一轮GC的回收**

2020-10-27 12:21:54 247 1

原创 .Net Core CLR 获取跟对象代码的分析

.Net Core CLR GC 的第一步过程就是标记阶段,其余的分别为,标记,计划,压缩,重定位,清扫。五个阶段。首先来看下标记阶段,所谓的标记阶段,就是CLR 会标记存活的对象,以便于不被清扫掉,而造成程序异常。标记的第一步首先是要获取到跟对象,通过跟对象获取到正在使用的对象,然后进行一个标记,所有代码均为C++如下:CLR的GC阶段的标记函数为:void gc_heap::mark_phase (int condemned_gen_number, BOOL mark_only_p){

2020-10-18 19:12:42 239

原创 天地有情尽白发,人间无意了沧桑

从此,我叫八戒天蓬苍老的面容,几根丝丝白发。爱情之折磨人,以至于斯乎?我自有仙子相配,爱你就会变成猪一语成谶,因果循环,报应轮回,屡试不爽。爱上宝儿,就会成为平凡人。位列上神,就会离开宝儿。当天蓬毫不犹豫的选择宝儿的时候,那根月老的牵丝线已经被取出。结局是悲哀的。然而没有悲哀的结局,何来感人的故事?四百八十年后,高家庄,永世不得位列仙班的天蓬戴着破败的斗笠。被惊呼为妖怪...

2020-07-05 13:44:00 410

原创 狼和羊的故事(安徒生新篇)

从前,有一群羊,在草原上很安定的生活着。由于水草丰盛,羊群很快繁殖了大量的小羊。小羊长大了继续繁殖,羊群的羊越来越多。后面来了几只狼,对羊说:附近好多狮子老虎,我们保护你们,你们尽情吃草。羊说,好的,救世主来了。狼不吃草,隔三差五的偷吃一只羊。羊群慢慢的减少了,狼一看不对劲。这样减少下去,后面我们吃什么。就对羊说,你们要多生小羊,我们狼才能更好的的保护你们。羊群一听,觉得也是,于是...

2020-06-28 11:55:00 808

原创 .Net Core CLR GC的浅度分析

.Net Core CLR 的GC分为两个部分,一个是GC的内存分配,另外一个是GC的垃圾回收。这里我们先讲一下垃圾回收。一.垃圾回收的触发条件1.在C#代码中调用 GC.Collection();2.物理内存不足的情况下3.分配量超过分配阈值4.找不到可分配的内存空间在满足了以上四个条件中的任何一个,CLR都会触发GC的垃圾回收,清理托管堆空间释放内存,以便下次使用。二.垃圾回收的...

2020-06-27 01:03:00 230

原创 CLR GC分析

.Net Core CLR 的GC分为两个部分,一个是GC的内存分配,另外一个是GC的垃圾回收。这里我们先讲一下垃圾回收。一.垃圾回收的触发条件1.在C#代码中调用 GC.Collection();2.物理内存不足的情况下3.分配量超过分配阈值4.找不到可分配的内存空间在满足了以上四个条件中的任何一个,CLR都会触发GC的垃圾回收,清理托管堆空间释放内存,以便下次使用。二.垃圾回收的流程1停止其它线程到并且切换到抢占模式(抢占模式不可访问托管堆代码,只可访问非托管)2.重新定位回收的目标代

2020-06-26 23:57:22 660

原创 .net core 的夸代扫描标记card_table的细节分析

夸代扫描,比如说回收短暂代,但是在短暂代当中有一个被一代引用的变量。这个时候可能会造成了这个变量被回收,程序发生不可与之错误。card table 就是为了预防这种情况的一个数组。 int p = 0; int* card_table= &p;card_table[0] = 1;card_table[1] = 2;card_table[2] = 3;card_table表在...

2020-05-21 18:16:00 263

原创 .net core 处理异常的精髓部分

.net core 里面处理异常无论是在linux 或者是widnows都有一个异常入口函数processclrexception()core里面的异常分为用户异常和硬件异常,前者是代码里面引发的异常,后面是CPU寄存器硬件等引发的异常两者处理不同在于VEH扩展,当硬件异常的时候,会调用注册的VEH处理异常。而后进入processclrexception,用户异常则省略了VEH部分直...

2020-05-05 14:08:00 318

原创 .Net Core监控文件改动

static void Main(string[] args) { IFileProvider fileProvider = new PhysicalFileProvider(Environment.CurrentDirectory); Action<object> callback = null; ...

2020-01-16 15:31:00 865

原创 .Net Core Linux 下面的操作

这里以 Ubuntu 8.04版本为例: 1.注册 Microsoft 密钥注册产品存储库安装必需的依赖项 wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-pro...

2020-01-09 22:22:00 199

原创 windebug(转载别人的节选)

  问题一:WinDBG分X86和X64两个版本  如果你用的是32位的WinDBG,那直接打开就行;你如果用的是64位的版本,那么如果调试64位代码也直接打开,如果调试x86的代码,要使用Wow64下的WinDBG.exe。  问题二:确定SOS和CLR的位置和版本  如果安装了Visual Studio的机器,可以打开VS的命令行,输入where sos.dll命令,可以...

2019-11-20 14:02:00 250

原创 .Net PE

// ConsoleApplication26.cpp: 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Windows.h>typedef ULONG_PTR TADDR;#define VAL16(x) x#define VAL32(x) x#define DPTR(type) type*#...

2019-11-15 16:01:00 307

原创 wpf 画五角星函数

public void ABC() { var canvas = new Canvas(); Content = canvas; var points = new List<Point>() { new Point(2...

2019-10-11 14:40:00 2459

原创 Gradle 编译spring 坑

首先 gradlew.bat其次 import-into-eclipse.bat转换spring-beans文件,将当前目录切换至spring-beans目录,执行命令gradle cleanidea eclipse遇到了一个错误:解决方法:将spring-beans文件夹下面的spring-beans.gradle文件最后三行注释掉去,再在终端执行命令gradle cle...

2019-09-26 10:29:46 731

原创 .Net Core CLR FileFormat Call Method( Include MetaData, Stream, #~)

#include "pch.h"#include <iostream>#include <Windows.h>#define VAL32(x) x#define VAL16(x) x#define DPTR(type) type*typedef DPTR(IMAGE_DOS_HEADER) PTR_IMAGE_DOS_HEADER;typedef ...

2019-08-01 15:41:00 369

原创 Core CLR Host 源码分析(4)

当CLR实例化PEAssembly 的时候,会调用 PEAssemblyHolder pFile(pDomain->BindAssemblySpec(this, fThrowOnFileNotFound, fRaisePrebindEvents, pCallerStackMark));实际上分为三步:Java/Python/Go/.Net讨论交流群:6768173081.通过 ...

2019-05-08 17:14:42 338

原创 Core CLR Host 源码分析(三)

接上一篇,Core CLR利用LoadDomainAssembly加载程序集,并且运用了.net 或者Java里面的全局注入形式来操作程序集的生成和运作具体代码如下:Java/Python/Go/.Net讨论交流群:6768173081.首先会获取到 AppDomain的实例2.获取到ICLRPrivBinder的实例,这个ICLRPrivBinder可以利用assemblyspec.S...

2019-04-04 16:18:39 512 1

原创 Core CLR Host源码分析 (二)

废话不多说,直接上源码:1.在托管程序集里面执行方法HRESULT CorHost2::ExecuteAssembly(DWORD dwAppDomainId,//通过CreateAppDomainWithManager创造的domainid LPCWSTR pwzAssemblyPath,//要托管的...

2019-03-28 16:39:19 369

原创 Core CLR Host 源码分析(一)

Core CLR Host 源码简单分析在定制 CLR Host的时候,可以通过调用如下代码,来获取当前需要被宿主的程序调用入口:Java/Python/Go/.Net讨论交流群:676817308hr = Host->CreateDelegate(domainId,L"Main,Version=1.0.0.0", L"Main.Program", // Target man...

2019-03-25 17:00:00 680

原创 Core CLR 自定义的Host官方推荐的一种形式(第一种)

Core CLR 自定义的Host官方推荐的一种形式(第一种) .Net Core CLR提供两种Host API访问 托管代码的形式,按照微软官方的说法,一种是通过CoreClr.DLL来直接调用托管生成的DLL程序集,另外一种是通过CoreClr里面的C导出函数GetCLRRuntimeHost获取到IID_ICLRRuntimeHost4然后...

2019-03-21 15:26:00 576

原创 编写自定义 .NET Core 主机以从本机代码控制 .NET 运行时

自定义 .Net Core 主机运行.Net Core代码,以及控制运行时运行状态,是在.Net Core 高级运行环境以及定制.Net Host ,CLR 等必不可少的。注意点:1.必须以 x64形式 Debug程序,否则loadlibrary 运行之后为零2.所有的路径都必须放在(Product\Windows_NT.x64.Debug)下面,因为程序要加载默认DLL,缺少DLL将...

2019-03-13 16:48:09 786

原创 C# 二维码的生成

C# 二维码的生成 nuget 搜索qrcodenet,然后选择下载gma.qrcodenetpublic partial class Form1 : Form { public Form1() { InitializeComponent(); } ...

2019-01-17 14:16:00 323

原创 Common Language Runtime(CLR)C++分配堆段小对象叙述

通常来说,内存中的划归为CLR的堆,在CLR中被分两个对象,分别为小对象和大对象,小对象包含了三代,分别为0代,1代,2代,大对象只有一个代就是3代。CLR分配内存的时候,首先尝试从自由列表(a_fit_free_list_p)分配,如果没有成功,则从堆段中分配。代码如下:BOOL gc_heap::a_fit_free_list_p (int gen_number, ...

2018-12-29 17:17:01 355

原创 .Net Core核心监听模块LibUv

这几天发现,.Net Core核心中的核心,也就是作为服务器的监听部分,居然用的是Node.Js的LibUv。.Net Core 作为微软最新的一款开源技术栈,其最大的创新就是用KestrelHtppServer构建了自己的专属服务器,取代了传统的IIS作为服务器,也是为了对抗Java Tomcat ,Apache的利器。这款KestrelHtppServer的核心正是 LibUv。在.Net...

2018-12-15 20:42:46 1718 1

hosting.zip

.net core 宿主程式,可以用这个来定制runtime 运行时,以及做一些其他tpalist 等动作

2019-11-22

MSCOREE.H CoreClr.DLL 的头文件

CoreClr.DLL的库头文件,主要用于自定制CoreCLR host主机

2019-03-26

编译好的CoreClrdll

利用python,cmake,powershell编译好的coreclr.dll,可以作为.net core 程序的宿主,自定制主机文件

2019-03-26

Java Spring MVC 简单的例子

Spring MVC 入门的简单例子,适合新手学习和研究,简单易懂。

2017-11-12

wondows 程序设计 MFC源码

windows MFC 框架全面剖析和TLS系统的详细运用

2014-01-16

拦截记事本[钩子]

钩子,DLL,进程注入,示例拦截记事本,调用C++ DLL

2013-06-25

webbrowser 仿制 天涯社区:国际观察版(未完)

仿制国际观察版本,提供搜索,发帖扥功能齐全。

2013-01-15

DLL注入

c# 整合c++远程注入 api重写等 记事本应用实例等 是值得一看的小工具

2012-11-09

c# dll注入钩子(全局钩子)

c++ 独立dll钩子,子线程映射,地址保存,api标题头重写。 c#调用从c++ dll挂钩程序,包括计算器,记事本等简单例题描述和功能实现。

2012-06-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除