- 博客(64)
- 资源 (3)
- 收藏
- 关注
原创 Windows系统介绍
Win8以上,计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\Configuration。MBR位于物理硬盘的0柱面,0磁头,1扇区,也就是整个硬盘的第一个扇区(偏移量为0),共占512个字节(即一个扇区)。c:\windows\1.txt 不存在,%localappdata%\VirtualStore\Windows\1.txt存在。包含4个表项,每个表项16字节,共占用64字节。
2024-09-12 16:40:19
1614
1
原创 VS2019界面介绍
IntelliSense 智能提醒IntelliSense 是一组功能,可用于在编辑器中直接显示代码的信息,并且可在某些情况下编写小段代码。在Visual Studio 中,打开“工具”> “选项”> “调试”> “符号”(或“调试”> “选项”> “符号”),在“符号文件(.pdb)位置”下。调试时,可以使用“监视”和“快速监视”窗口来监视变量和表达式。PDB又称为程序数据库,数据存储在与可执行文件不同的文件中,以帮助限制可执行文件的大小,从而节省磁盘存储空间并减少加载数据所花的时间。
2024-09-12 12:02:26
1625
原创 ApplicationVerifier介绍说明
AppVerifier 特别用于检测和帮助调试内存损坏、危险的安全漏洞以及受限的用户帐户特权问题。AppVerifier 有助于创建可靠且安全的应用程序,方法是监视应用程序与Windows操作系统的交互,并配置应用程序使用的对象、注册表、文件系统和 Win32 API(包括堆、句柄和锁)。官方文档:https://docs.microsoft.com/zh-cn/previous-versions/aa480483(v=msdn.10)?
2024-09-11 17:48:21
1373
原创 etl文件性能分析
7、若6、中的代码耗时不大,则进一步查看展开6、中的ReadyThreadId对应的调用栈,并按TimeSinceLast从高到低排序,根据调用关系炸开对应的堆栈,直至ReadyProcess列、ReadyThreadId列存在值,即看下调用方。5、添加TimeSinceLast 列,并按TimeSinceLast从高到低排序,对应线程最上报的NewThreadStack就是最耗时的操作,展开追踪,确认是ReadyProcess列对应的进程调用。根据Count列,从消耗最高的开始找。
2024-09-11 16:15:53
1088
原创 性能分析工具使用
3、在Series窗口筛选要分析的进程,在进程名上右键选择"Filter to Selection"CPU时间,它在Computation项里面,用CPU Usage(Sampled)来分析。1、双击Computation项的CPU Usage(Sampled)之后发现模块名后面出现很多?,这是因为没有符号文件,加载符号文件。点击"save",停止事件跟踪,并将.etl文件保存到指定路径。符号文件正确的话,就可以看到具体的模块函数名了。使用wpa.exe打开。
2024-09-11 15:09:16
361
原创 DDD(data display debugger)调试工具
data display debugger是命令行调试程序,可以理解为可视化的GDB。在想要设置断点的位置右键弹出菜单,选择设置即可。顺便写一个测试程序,编译可执行文件。回车后弹出ddd界面。
2024-06-24 16:11:27
568
原创 gdb常用命令
GDB是GNU调试器(GNU Debugger)的缩写,是linux系统重标准调试工具,可通过对编译后的可执行文件进行调试,帮助定位程序的错误和异常。若显示信息最后是stripped,则说明文件的符号表信息和调试信息被去除,不能调试。默认情况下,run 指令会一直执行程序,直到执行结束。start 指令会执行程序至 main() 主函数的起始位置,即在 main() 函数的第一行语句处停止执行(该行代码尚未执行)。支持gdb的,在编译时加上-g参数,保留了调试信息的可执行文件。
2024-06-24 16:02:04
437
原创 CMake项目的CMackeLists.txt内容语法详解
CMake(cross platform make)是一个跨平台的安装编译工具,可以使用简单的语句描述安装编译过程,输出安装编译过程中产生的中间文件。CMake不直接产生最终的文件,而是产生对应的构造文件,如linux下的makefile,windows下的vs的projects等。PUBLIC:目标自己和其他依赖这个目标的目标都会使用这些编译参数。INTERFACE:只有其他依赖这个目标的目标会使用这些编译参数。PRIVATE:只有目标自己会使用这些编译参数。1)编写CMakeLists.txt文件。
2024-06-18 18:27:50
1066
原创 适用VS2019尝试生成跨平台的动态库
查看日志提示编译生成的相关文件在/home/test/.vs/testDll/e0783f20-c071-4a34-aeae-f53e004596a6/out/build/Linux-GCC-Release,到目录下看看。VS菜单栏:工具——选项——跨平台——连接管理器——点击添加,填入远程计算机的ip、端口、用户名、密码即可,点击确定关闭页面。在自动执行CMake生成之后这里就有这个dll了,接着点击选中,选择启动项的位置就变了。到这里,再不修改任何代码的前提下,就完成了一个跨平台的动态库的编译了。
2024-06-14 15:56:30
1591
原创 在执行sudo apt update时提示“sudo:apt:找不到命令”
我们知道linux有许多的系统,例如CentOS、Ubuntu等,而apt和yum都是linux的包管理工具,可以安装、升级和删除软件。那么为什么会有两个一样功能的命令呢?也就是说,我的系统是CentOs,那我使用apt命令就会无法识别,找不到这个命令,这个情况下我应该使用yum,如下。在干净的虚拟机环境发现执行不了“sudo apt update”命令。等待更新完成就可以了。
2024-06-14 11:23:17
6971
原创 执行命令提示不在 sudoers 文件中此事将被报告的解决办法
如上,在执行sudo apt update的时候提示了“test 不在 sudoers 文件中。从上,我们看到sudoers的权限是只读的,看下内容,是空的。发现sudoers可以打开了,找到下图中的行。之后切换到test用户输入密码就可以了。这个时候我们先到etc目录下查看文件。
2024-06-14 11:10:17
4600
原创 深入解析Windows操作系统——系统机制——陷阱分发
Windows在设备驱动程序的配合下企图将IRQL保持在低于设备IRQL级别之下:让设备驱动程序ISR执行最少最必要的工作来响应它们的设备,将易变的中断状态保存起来,并且将数据传输或者其他并非时间紧迫的中断处理活动推迟到一个位于DPC/Dispatch IRQL级别上的DPC中再执行。APC对象:正在等待执行的APC驻留在一个由内核管理的APC队列中,DPC队列是系统范围的,不同的是APC队列是与特定线程相关的,每个线程有它自己的APC队列。在同样的条件下用同样的数据第二次运行一个程序可以重现原来的异常。
2023-12-07 12:36:11
607
原创 深入解析Windows操作系统——概念和工具
也被称为“轻量级”的线程。默认情况下,线程没有自己的访问令牌,但它们也可以包含一个访问令牌,因此单独的线程可以模仿另一个进程得到安全环境——包括在远程Windows系统上运行的进程——而不会影响到当前进程中的其他线程。:系统数据库,包含了引导和配置系统所必要的信息、系统范围的控制Windows操作的软件设置、安全数据库、以及针对每个用户的配置信息。:针对所有可共享对象的自主保护、安全审计、登录时的口令认证、以及在一个用户释放了某一资源后,另一个用户无法通过访问未初始化资源的办法看到前一个用户留下的资源。
2023-11-21 19:40:59
392
原创 windows程序设计 输出文本
文章目录1、绘制和刷新1.1 WM_PAINT消息1.2 有效矩形和无效矩形2、GDI2.1 设备描述表2.2 获取设备描述表句柄的方法2.2.1 BeginPaint和EndPaint函数2.2.2 GetDC函数3、系统字体 客户区:整个应用程序窗口中未被标题栏、窗口边框以及可选的菜单栏、工具栏、状态栏和滚动条占据的部分驱动。就是可以由程序任意书写和传递可视信息的部分。1、绘制和刷新  
2022-05-07 21:24:34
440
原创 LoadCursor
文章目录函数原型参数说明其他函数原型WINUSERAPIHCURSORWINAPILoadCursorA( __in_opt HINSTANCE hInstance, __in LPCSTR lpCursorName);WINUSERAPIHCURSORWINAPILoadCursorW( __in_opt HINSTANCE hInstance, __in LPCWSTR lpCursorName);#ifdef UNICODE#define Load
2022-04-02 20:29:01
1047
原创 LoadIcon
文章目录函数原型返回值其他函数原型WINUSERAPIHICONWINAPILoadIconA( __in_opt HINSTANCE hInstance, __in LPCSTR lpIconName);WINUSERAPIHICONWINAPILoadIconW( __in_opt HINSTANCE hInstance, __in LPCWSTR lpIconName);#ifdef UNICODE#define LoadIcon LoadIco
2022-03-30 19:48:39
296
原创 Windows程序设计 窗口和消息
文章目录1、实例1、解析注册窗口类 我们在使用windows系统时,有2类窗口:应用程序窗口和对话框。窗口中的每一个可视对象都是一个“子窗口”或“控制窗口”或“子窗口控件”。用户可以通过鼠标和键盘直接和窗口进行交互,窗口以“消息”的形式接收窗口的输入。在windows系统中,可以通过鼠标拖动窗口的边框改变窗口的大小,这些实际上是Windows本身而不是应用程序处理的。当用户改变窗口时,Windows给程序发送一条消息通知新窗
2022-03-30 15:26:23
2254
原创 Windows API ShowWindow和UpdateWindow
文章目录ShowWindow函数原型返回值头文件UpdateWindow函数原型返回值头文件ShowWindow函数原型WINUSERAPIBOOLWINAPIShowWindow( __in HWND hWnd, __in int nCmdShow);功能是:设置指定窗口的显示状态参数说明hWnd窗口句柄nCmdShow指定窗口如何显示 如果程序提供STA
2022-03-30 15:25:06
1582
原创 Windows API CreateWindow
文章目录函数原型参数创建窗口的风格函数原型WINUSERAPIHWNDWINAPICreateWindowExA( __in DWORD dwExStyle, __in_opt LPCSTR lpClassName, __in_opt LPCSTR lpWindowName, __in DWORD dwStyle, __in int X, __in int Y, __in int nWidth, __in int nHeight,
2022-03-30 12:04:56
288
原创 Windows程序设计 MessageBox
1、简介 MessageBox是用来显示一个模态的对话框的,其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息,如状态或错误的信息。消息框中返回一个整数值,该值指示用户单击了哪个按钮。 所属头文件:Windows.h和sfxwin.h。1、函数原型在WinUser.h中,定义如下:WINUSERAPIintWINAPI
2022-03-16 18:20:33
789
原创 Unicode字符编码
1、简介Unicode是ASCII(美国信息交换标准码)字符编码的一个扩展。ASCII中每个字符用7位表示,计算机上每个字符8位。Unicode使用全16为字符编码,因此Unicode能表示世界上所有能用于计算机通讯的符号。Unicode最初是作为ASCII的补充。ASCII最终有26个小写/大写字母、10个数字、32个符号、33个控制代码和一个空格,共128个代码。1、优点大小写字符的代码是连续的大小写字母可以通过改变一位数据相互转换为了兼容不同国家的语言,需要考虑如何确认和ASCII的兼容。因
2022-03-15 19:26:26
13512
原创 Windbg分析dmp时没有明确提示代码位置时的处理
第一种情况在用windbg打开dmp文件时会出现:1、运行!analyze -v提示以下内容0:124> !analyze -v******************************************************************************** **
2022-03-12 19:20:03
2106
1
原创 windows程序设计基础知识
1、windows.h头文件windows.h是主要的包含文件,包含其他windows头文件,其中包含最重要和最基本的是:windef.h——基本类型定义winnt.h——支持unicode的类型定义winbase.h——内核函数winuser.h——用户接口函数wingdi.h——图形设备接口函数这些头文件定义了windows的所有数据类型、函数调用、数据结构和常数标识符,是windows文档中的一个重要部分。2、程序入口点我们在vs2008中创建一个win32 project的wind
2022-03-09 16:49:26
3270
原创 VS调试技巧学习
文章目录一、断点调试1、设置断点一、断点调试#include "stdafx.h"unsigned int GetMin(unsigned int nParam1, unsigned int nParam2){ //这里默认输入的2个参数不等 if (nParam1 < nParam2) { return nParam1; } return nParam2;}int _tmain(int argc, _TCHAR* argv[]){ unsigned int n
2022-02-14 10:57:42
1217
原创 SVN和git的优缺点比较
文章目录1、svn1.1 优点1.2 缺点2、git2.1 优点2.2 缺点1、svnsvn是集中式版本控制系统,版本库是集中放在中央服务器的,因此我们在自己的电脑干活时的步骤大致是:从中央服务器拿到最新的版本——干活——把干完的话推送到中央服务器。集中式版本控制系统必须联网。1.1 优点1)管理方便2)集中式服务器更能保证安全性3)代码一致性高1.2 缺点1)服务器压力大,单点故障2)不能连接到服务器上,基本上不可以工作3)不适合开发人员多的项目开发(但是集中式版本控制系统明确的权限管
2021-12-27 18:41:03
4251
原创 TortoiseGit的安装使用
文章目录1、安装1.1 TortoiseGit安装1.2 安装语言包2、常规配置主要是和git一起使用,方便git命令的执行。最好在安装好的git的环境进行安装1、安装1)官网下载安装包https://tortoisegit.org/download/下载对应的安装包TortoiseGit-2.12.0.0-64bit.msi2)在上图的下方Language Packs下载语言包TortoiseGit-LanguagePack-2.12.0.0-64bit-zh_CN.msi1.1 Tortoi
2021-12-27 18:37:43
549
原创 git的安装、工作流程和命令
文章目录1、安装2、工作流程3、git管理文件版本3.1 创建版本库4、命令4.1 init4.2 add4.3 clone4.4 config4.5 status4.6 diff4.7 commit4.8 reset4.9 rm4.10 mv4.11 log4.12 blame4.13 remote4.14 fetch4.15 pull4.16 push4.17 分支管理4.18 tag1、安装由于本人主要是在windows下开发,因此这里只讲windows下git的安装(Linux、Unix和Mac
2021-12-27 17:15:59
351
原创 编译curl的动态库以及curl动态库的使用
文章目录1、编译curl静态库2、curl动态库的编译1、直接编译curl源码2、用户生成自定义curl动态库2.1、用户根据自己的需要,列出需要使用的接口2.2 实现上述的接口2.3 接口均实现完成,点击编译即可2.4 其他情况3、注意点1、编译curl静态库1、从 https://github.com/curl/curl.git 拉取curl的源码,我是直接下载的zip包2、本地解压zip包到对应的目录3、根据情况打开curl-all.sln解决方案,这里使用的是curl\projects\Wi
2021-12-27 16:41:01
5132
原创 FILE* 在不同模块间传递崩溃的问题
自己编译了一个openssl的动态库,在测试时调用PEM_read_RSA_PUBKEY发现出现崩溃,查看堆栈如下:查看一下0x00d1c688内存,发现内存不对在libssl.lib中会将fp和lib中的一个全局变量进行比较,这个时候因为不同的模块有不同的内存空间和全局变量,因此fp和libssl.lib中的值比较非法,就出现错误了。。解决办法:openssl的动态库中使用到FILE的接口,将file参数换成文件路径,在内部转为file传递即可...
2021-12-27 16:14:22
240
原创 windbg分析崩溃dmp没有可用信息的处理
文章目录1、示例分析步骤1、转储dmp文件2、使用WinDbg打开dmp文件3、!analyze -v1、示例这个只用作说明,因此代码简单// TestDmp.cpp : Defines the entry point for the console application.//#include "stdafx.h"typedef struct _TEST_INFO_{ CString strAlarm; int nCount; _TEST_INFO_() { strAlar
2021-12-22 20:43:47
4456
原创 Windbg内存泄漏问题的定位
文章目录1、搭建环境1.1 测试程序1.2 设置pdb路径和源码路径2、定位2.1 运行程序2.2 分析2.2.1 查看一下堆栈分配情况1、搭建环境1.1 测试程序这里的测试程序是很简单的那种,凑合着用吧#include "stdafx.h"void LeakMem(){ while (true) { char *pTest = new char[512]; }}int _tmain(int argc, _TCHAR* argv[]){ LeakMem(); sys
2021-11-16 18:25:38
1849
原创 WinDbg 定位句柄泄漏问题
文章目录一、观察进程是否有句柄泄漏1、查看工具任务管理器查看句柄数procexp.exe查看进程句柄信息2、判断是否有句柄泄漏二、定位方法1、WinDbg分析句柄泄漏1.1 Event句柄泄漏1.1.1 代码示例1.1.2一、观察进程是否有句柄泄漏1、查看工具使用任务管理器或Process Explorer(procexp.exe)工具可观察进程的句柄数。任务管理器查看句柄数procexp.exe查看进程句柄信息2、判断是否有句柄泄漏通常在程序运行稳定后,再观察句柄数有无增长,比如进程启动5分
2021-11-12 18:38:28
3830
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人