文件句柄

WinDbg常用命令系列---!handle

血红的双手。 提交于 2019-12-05 09:03:24
!handle 简介 !handle扩展显示有关目标系统中一个或所有进程拥有的一个或多个句柄的信息。 使用形式 用户模式 !handle [ Handle [ UMFlags [ TypeName ]]] !handle -? 内核模式 !handle [ Handle [ KMFlags [ Process [ TypeName ]]]] 参数 Handle 指定要显示的句柄的索引。如果Handle为-1或省略此参数,调试器将显示与当前进程关联的所有句柄的数据。如果句柄为0,调试器将显示所有句柄的数据。 UMFlags (仅限用户模式)指定显示内容。此参数可以是以下任何位值的总和。(默认值为0x1。)| 位 0 (0x1) 显示句柄类型信息。 位 1 (0x2) 显示基本句柄信息。 位 2 (0x4) 显示句柄名称信息。 位 3 (0x8) 显示特定于对象的句柄信息 (如果可用)。 KMFlags (仅限内核模式)指定显示内容。此参数可以是以下任何位值的总和。(默认值为0x3。) 位 0 (0x1) 显示基本句柄信息。 位 1 (0x2) 显示有关对象的信息。 位 2 (0x4) 显示可用的句柄项。 如果未设置此位并且省略了 句柄 或将其设置为零, 则显示的句柄列表不包含可用的句柄。 如果 handle 指定单个自由句柄, 则即使未设置此位, 也会显示该句柄。 位 4 (0x10

不止面试—jvm类加载面试题详解

核能气质少年 提交于 2019-12-05 06:10:25
摘自: https://www.cnblogs.com/bailiyi/p/11887470.html 不止面试—jvm类加载面试题详解 面试题 带着问题学习是最高效的,本次我们将尝试回答以下问题: 什么是类的加载? 哪些情况会触发类的加载? 讲一下JVM加载一个类的过程 什么时候会为变量分配内存? JVM的类加载机制是什么? 双亲委派机制可以打破吗?为什么 答案放在文章的最后,来不及看原理也可以直接跳到最后直接看答案。 深入原理 类的生命周期 类的生命周期相信大家已经耳熟能详,就像下面这样: 不过这东西总是背了就忘,忘了又背,就像马什么梅一样,对吧? 其实理解之后,基本上就不会再忘了。 加载 加载主要做三件事: 找到类文件(通过类的全限定名来获取定义此类的二进制字节流) 放入方法区(将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构) 开个入口(生成一个代表此类的java.lang.Class对象,作为访问方法区这些数据结构的入口) 总的来讲,这一步就是通过类加载器把类读入内存。需要注意的是,第三步虽然生成了对象,但并不在堆里,而是在方法区里。 连接 连接分为三步,一般面试都比较喜欢问 准备 这一步。 校验 顾名思义,检查Class文件的字节流中包含的信息是否符合当前虚拟机的要求。 准备 这一步中将为静态变量和静态常量分配内存,并赋值。 需要注意的是

vc编程实现sys文件的安装

五迷三道 提交于 2019-12-04 20:29:24
#include <windows.h> #include <winsvc.h> #include <conio.h> #include <stdio.h> #define DRIVER_NAME "123467" #define DRIVER_PATH "..\\HelloDDK.sys" //装载NT驱动程序 BOOL LoadNTDriver(char* lpszDriverName,char* lpszDriverPath) { /************************ 加载NT驱动的代码******************************* ① 调用OpenSCManager,打开SCM管理器.如果返回NULL,则返回失败,否则继续 ② 调用CreateService,创建服务,创建成功则转步骤 ⑥ ③ 用GetLastError的得到错误返回值 ④ 返回值为ERROR_IO_PENDING,说明服务已经创建过,用OpenService打开此服务. ⑤ 返回值为其他值, 创建武服务失败,返回失败. ⑥ 调用StartService开启服务 ⑦ 成功返回 ************************************************************************/ char szDriverImagePath[256];

windows中的句柄

早过忘川 提交于 2019-12-04 14:00:26
指使用的一个唯一的整数值,来标识 应用程序 中的不同 对象 和同类中的不同的实例 , 诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。 windows 之所以要设立句柄,根本上源于内存管理机制的问题— 虚拟地址 ,简而言之数据的地址需要变动,变动以后就需要有人来记录管理变动,(就好像户籍管理一样),因此系统用句柄来记载数据地址的变更。 有些数据(例如不常用的数据会为常用数据让出其占用的内存空间,进而被淘汰进硬盘虚拟内存之中)的物理地址总是变动的,系统为进程分配固定的地址(句柄)来存储进程下的数据对象变化后的地址。 Unix中的文件描述符基本上也属于句柄。 来源: https://www.cnblogs.com/Stephen-Qin/p/11869378.html

Windows用户模式调试内部组件

ε祈祈猫儿з 提交于 2019-12-04 09:44:58
简介 允许用户模式调试工作的内部机制很少得到充分的解释。更糟糕的是,这些机制在Windows XP中已经发生了根本性的变化,当许多支持被重新编写时,还通过将ntdll中的大多数例程作为本地API的一部分,使更多的子系统变得可移植。希望读者对C和通用NT内核体系结构和语义有一些基本的了解。此外,这并不是介绍什么是调试或如何编写调试器。它可以作为经验丰富的调试器编写人员或好奇的安全专家的参考。 Win32 Debugging NT的Win32子系统从第一个版本开始就允许对进程进行调试,随后的版本添加了更多与符号和其他PE信息相关的特性和调试帮助库。但是,对于外部API用户来说,除了在Windows XP中添加的停止调试进程而不杀死进程的功能之外,其他的变化相对较少。NT的这个版本还包含了对底层实现的几次彻底检查,我们将对此进行详细讨论。但是,这些更改的一个重要副作用是不再使用LPC(和csrss.exe),这允许调试这个二进制文件(以前,调试这个二进制文件是不可能的,因为它负责处理内核到用户的通知)。 处理调试进程的基本win32api很简单:DebugActiveProcess,to attach,WaitForDebugEvent,等待调试事件的出现,以便调试可以处理它们,ContinueDebugEvent,恢复线程执行。WindowsXP的发布增加了三个更有用的API

详解Linux服务器最大tcp连接数

房东的猫 提交于 2019-12-03 18:54:58
网络编程 在tcp应用中,server事先在某个固定端口监听,client主动发起连接,经过三路握手后建立tcp连接。那么对单机,其最大并发tcp连接数是多少? 如何标识一个TCP连接 在确定最大连接数之前,先来看看系统如何标识一个tcp连接。系统用一个4四元组来唯一标识一个TCP连接:{local ip, local port,remote ip,remote port}。 client最大tcp连接数 client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short,因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。 server最大tcp连接数 server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的

程序猿版日志

痴心易碎 提交于 2019-12-03 14:36:56
def loger(filename,debug = None,info=None,error=None,warning=None,critical=None,encoding='uft-8'): import logging loger = logging.Logger('loger') # 创建一个空日志 fb = logging.FileHandler(filename='日志.log', mode='a', encoding='utf-8') # 创建一个文件句柄 pb = logging.StreamHandler() # 创建一个屏幕流 format = logging.Formatter('%(asctime)s %(levelname)s %(lineno)s %(filename)s %(message)s') # 创建一个存储或显示的格式 fb.setFormatter(format) # 将格式添加到文件句柄中 pb.setFormatter(format) # 将格式添加到屏幕流中 loger.addHandler(fb) # 将文件句柄添加到loger对象中 loger.addHandler(pb) # 将屏幕流添加到loger对象中 loger.setLevel(10) if debug: loger.debug(debug) elif error:

聊聊C10K问题及解决方案

*爱你&永不变心* 提交于 2019-12-03 07:04:30
#0 系列目录# 聊聊远程通信 Java远程通讯技术及原理分析 聊聊Socket、TCP/IP、HTTP、FTP及网络编程 RMI原理及实现 RPC原理及实现 轻量级分布式 RPC 框架 使用 RMI + ZooKeeper 实现远程调用框架 深入浅出SOA思想 微服务、SOA 和 API对比与分析 聊聊同步、异步、阻塞与非阻塞 聊聊Linux 五种IO模型 聊聊IO多路复用之select、poll、epoll详解 聊聊C10K问题及解决方案 #1 C10K问题# 大家都知道 互联网的基础就是网络通信 ,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多。一台服务器同时在线100个用户估计在当时已经算是大型应用了。所以并不存在什么C10K的难题。互联网的爆发期应该是在www网站,浏览器,雅虎出现后。最早的互联网称之为Web1.0,互联网大部分的使用场景是下载一个Html页面,用户在浏览器中查看网页上的信息。这个时期也不存在C10K问题。 Web2.0时代到来后就不同了,一方面是普及率大大提高了,用户群体几何倍增长。另一方面是互联网不再是单纯的浏览万维网网页,逐渐开始进行交互,而且应用程序的逻辑也变的更复杂,从简单的表单提交,到即时通信和在线实时互动。C10K的问题才体现出来了。 每一个用户都必须与服务器保持TCP连接才能进行实时的数据交互

可能是把 Java 内存区域讲的最清楚的一篇文章

一曲冷凌霜 提交于 2019-12-03 04:52:33
出处: 可能是把 Java 内存区域讲的最清楚的一篇文章 Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚拟机栈 2.3 本地方法栈 2.4 堆 2.5 方法区 2.5.1 方法区和永久代的关系 2.5.2 常用参数 2.5.3 为什么要将永久代 (PermGen) 替换为元空间 (MetaSpace) 呢? 2.6 运行时常量池 2.7 直接内存 三 HotSpot 虚拟机对象探秘 3.1 对象的创建 Step1:类加载检查 Step2:分配内存 Step3:初始化零值 Step4:设置对象头 Step5:执行 init 方法 3.2 对象的内存布局 3.3 对象的访问定位 四 重点补充内容 4.1 String 类和常量池 4.2 String s1 = new String("abc");这句话创建了几个字符串对象? 4.3 8 种基本类型的包装类和常量池 参考 Java 内存区域详解 如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题 String 类和常量池

select

匿名 (未验证) 提交于 2019-12-03 00:32:02
select系统调用是用来让我们的程序监视多个文件句柄(file descrīptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。 文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a file descrīptor for the new socket is returned.”而man 2 open可以看到“open() and creat() return the new file descrīptor”,其实文件句柄就是一个整数,看socket函数的声明就明白了: int socket(int domain, int type, int protocol); 当然,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr,0就是stdin,1就是stdout,2就是stderr。 比如下面这两段代码都是从标准输入读入9个字节字符: #include <stdio.h> #include <unistd.h> #include <string.h> int main(int argc, char