<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Maoning Guan的博客]]></title><description><![CDATA[Following your heart.]]></description><link>https://blog.youkuaiyun.com/guanmaoning</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; guanmaoning]]></copyright><item><title><![CDATA[虚函数和纯虚函数]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/128401311</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/128401311</guid><author>guanmaoning</author><pubDate>Wed, 21 Dec 2022 20:08:23 +0800</pubDate><description><![CDATA[在C++中存在虚函数和纯虚函数，这两种存在异同点，有时会让人混淆，以下分别对这两种函数的异同点进行说明。]]></description><category></category></item><item><title><![CDATA[D-Bus资料索引]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/128391655</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/128391655</guid><author>guanmaoning</author><pubDate>Wed, 21 Dec 2022 00:04:43 +0800</pubDate><description><![CDATA[最近在研究D-Bus相关的技术，但发现国内资料较少，因此准备在此汇总一下D-Bus相关的资料。]]></description><category></category></item><item><title><![CDATA[微信逆向分析（四）——逆向分析的工具]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/118192076</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/118192076</guid><author>guanmaoning</author><pubDate>Thu, 24 Jun 2021 17:00:23 +0800</pubDate><description><![CDATA[前言
老话，工欲善其事，必先利其器。这篇聊聊逆向分析用到的工具。不聊工具细节，自行百度学习。重要的是理清：使用工具，是为了解决什么问题。
工具
1、CE
找偏移的方法中聊到，最直接就是在内存里面搜索。
CE（CheatEngine又称CE修改器），就是用来搜索内存里面东西，得到内存地址。
2、IDA
逆向分析，我们拿到手的是已经编译好的软件，看不了代码。
要是能把软件恢复成代码，分析起来就方便多了。
IDA这个工具，就是用来把软件恢复成代码的。
软件编译过程会去掉一些多余的信息。
所以IDA没办法说完全恢复]]></description><category></category></item><item><title><![CDATA[微信逆向分析（三）——逆向分析的实现思路]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/118192029</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/118192029</guid><author>guanmaoning</author><pubDate>Thu, 24 Jun 2021 16:57:51 +0800</pubDate><description><![CDATA[前言
找到偏移之后，就是写辅助工具了。这一篇聊聊写辅助工具的原理。具体的代码细节，等到实战会展开细说。
明确一下
逆向两个目的
1、调用功能
2、获取数据
对应的实现方法
1、调用功能
找到偏移，直接调用。
2、获取数据
对于全局数据，找到偏移，直接得到。
对于局部数据，拦截代码，间接得到 。
写外部工具
1、调用功能
windows系统提供了接口（CreateRemoteThread），允许一个软件调用另一个软件的功能。
2、获取数据
对于全局数据
windows系统提供了接口（ReadProcessMe]]></description><category></category></item><item><title><![CDATA[微信逆向分析（二）——逆向分析的方法]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/118191881</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/118191881</guid><author>guanmaoning</author><pubDate>Thu, 24 Jun 2021 16:53:13 +0800</pubDate><description><![CDATA[上一篇，聊到逆向分析是找偏移，有依据地找，效率会快。这一篇聊下找偏移方法。只说概念，具体的细节，后续会配合实战再展开细说。
找偏移的方法
1、内存
逆向的目的，是找功能或者数据在内存的地址。最直接的方法，就是在内存里面搜索。
对于数据：可以直接在内存搜索。
对于功能：如果知道代码的特征码，也可以直接在内存寻找。
（所谓代码的特征码，具体是一串字符串，在内存是唯一的，可以用来搜索定位）。
2、界面
带界面的软件，一般流程就是：
1、软件生成界面，界面上会有按钮，编辑框这些控件。
2、用户操作界面，点击按钮或者]]></description><category></category></item><item><title><![CDATA[微信逆向分析（一）——逆向分析的原理]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/118191538</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/118191538</guid><author>guanmaoning</author><pubDate>Thu, 24 Jun 2021 16:49:29 +0800</pubDate><description><![CDATA[逆向的简单理解
正向开发，是先写代码，再编译成软件。而逆向分析，到手的只有软件。从软件入手，推测对应的代码，需要了解一下编译之后的软件是怎么跑起来的。
软件运行过程
1、软件加载到内存。
2、CPU读取内存的指令。
3、根据指令，再读取数据，进行运算。
4、运算的过程，数据是存在CPU里面的寄存器。
5、运算过程，用到另一个功能，需要保存当前环境，存到堆栈。
代码语言的变化
1、C/C++语言：高级语言，给人看的
2、汇编语言   ：低级语言，给机器用的
（逆向分析，接触多是汇编语言）
软件加载过程
磁盘 ]]></description><category></category></item><item><title><![CDATA[安装visual studio后，打开excel提示安装Office自定义项出错]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/112806315</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/112806315</guid><author>guanmaoning</author><pubDate>Tue, 19 Jan 2021 12:06:01 +0800</pubDate><description><![CDATA[出错的文件是：
Common7\IDE\PrivateAssemblies\Microsoft.VisualStudio.QualityTools.LoadTestExcelAddIn.vsto
按网上搜索的结果，在com加载项里删除相关项就行了，但是删除了也一样提示，而且重新打开com加载项，发现删除不了。

具体是左上角的倒三角，工具，com加载项。

最后下载和安装了Registry Workshop，查找Microsoft.VisualStudio.QualityTools.LoadTestExce]]></description><category></category></item><item><title><![CDATA[Python CPU密集型对IO密集型 多进程更优于多线程 GIL]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/109124756</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/109124756</guid><author>guanmaoning</author><pubDate>Fri, 16 Oct 2020 20:57:08 +0800</pubDate><description><![CDATA[转载来源：https://blog.youkuaiyun.com/lambert310/article/details/50605748
CPU密集型和IO密集型
最近在看Python的多线程，经常我们会听到老手说：“python下多线程是鸡肋，推荐使用多进程！”，但是为什么这么说呢？
要知其然，更要知其所以然。所以有了下面的深入研究：
首先强调背景：
1、GIL是什么？ GIL的全称是Global Interpreter Lock(全局解释器锁)，来源是python设计之初的考虑，为了数据安全所做的决定。2、每个CP]]></description><category></category></item><item><title><![CDATA[Python的GIL（全局解释器锁）]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/109085274</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/109085274</guid><author>guanmaoning</author><pubDate>Wed, 14 Oct 2020 21:54:09 +0800</pubDate><description><![CDATA[转载来源：https://blog.youkuaiyun.com/weixin_41594007/article/details/79485847
在进行GIL讲解之前，我们可以先回顾一下并行和并发的区别：
并行：多个CPU同时执行多个任务，就好像有两个程序，这两个程序是真的在两个不同的CPU内同时被执行。
并发：CPU交替处理多个任务，还是有两个程序，但是只有一个CPU，会交替处理这两个程序，而不是同时执行，只不过因为CPU执行的速度过快，而会使得人们感到是在“同时”执行，执行的先后取决于各个程序对于时间片资源的争夺]]></description><category></category></item><item><title><![CDATA[深度剖析凭什么python中整型不会溢出]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108756102</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108756102</guid><author>guanmaoning</author><pubDate>Wed, 23 Sep 2020 16:38:00 +0800</pubDate><description><![CDATA[转载来源：深度剖析凭什么python中整型不会溢出
前言
本次分析基于 CPython 解释器，python3.x版本
在python2时代，整型有 int 类型和 long 长整型，长整型不存在溢出问题，即可以存放任意大小的整数。在python3后，统一使用了长整型。这也是吸引科研人员的一部分了，适合大数据运算，不会溢出，也不会有其他语言那样还分短整型，整型，长整型…因此python就降低其他行业的学习门槛了。
那么，不溢出的整型实现上是否可行呢？
不溢出的整型的可行性
尽管在 C 语言中，整型所表示的大]]></description><category></category></item><item><title><![CDATA[秋招总结：遇到的手撕代码题]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108673875</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108673875</guid><author>guanmaoning</author><pubDate>Fri, 18 Sep 2020 22:11:16 +0800</pubDate><description><![CDATA[跟谁学
一面：求连续子数组的最大和（力扣 53）
【思路：力扣系列略，题解区都比我讲得好】
二面：翻转字符串中的每个单词（简单题，比较常见，没去找对应的原题）
【思路：遍历字符串，每找到一个单词就把它翻转一下，空格跳过】
字节
x面：不使用除法实现除自身外数组元素的乘积（力扣 238）
【思路：力扣系列略，题解区都比我讲得好】
x面：实现NMS
【思路：略，目标检测的相关基础】
一面：k个一组翻转链表（力扣 25）
【思路：力扣系列略，题解区都比我讲得好】
拼多多
一面：给n个标签和位置的pair，位置表示]]></description><category></category></item><item><title><![CDATA[运用递归解决树的问题]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108523585</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108523585</guid><author>guanmaoning</author><pubDate>Thu, 10 Sep 2020 21:58:01 +0800</pubDate><description><![CDATA[基于递归解决树的问题
我们知道可以利用递归求解树的遍历。 递归是解决树的相关问题最有效和最常用的方法之一。
我们知道，树可以以递归的方式定义为一个节点（根节点），它包括一个值和一个指向其他节点指针的列表。 递归是树的特性之一。 因此，许多树问题可以通过递归的方式来解决。
对于每个递归层级，我们只能关注单个节点内的问题，并通过递归调用函数来解决其子节点问题。
通常，我们可以通过 “自顶向下” 或 “自底向上” 的递归来解决树问题。
1. “自顶向下” 的解决方案
“自顶向下” 意味着在每个递归层级，我们将首先]]></description><category></category></item><item><title><![CDATA[146. LRU缓存机制]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108450086</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108450086</guid><author>guanmaoning</author><pubDate>Mon, 07 Sep 2020 16:11:23 +0800</pubDate><description><![CDATA[146. LRU缓存机制
题目描述
运用你所掌握的数据结构，设计和实现一个  LRU (最近最少使用) 缓存机制。它应该支持以下操作： 获取数据 get 和 写入数据 put 。
获取数据 get(key) - 如果关键字 (key) 存在于缓存中，则获取关键字的值（总是正数），否则返回 -1。
写入数据 put(key, value) - 如果关键字已经存在，则变更其数据值；如果关键字不存在，则插入该组「关键字/值」。
当缓存容量达到上限时，它应该在写入新数据之前删除最久未使用的数据值，从而为新的数据值留]]></description><category></category></item><item><title><![CDATA[MySQL——锁]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108432946</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108432946</guid><author>guanmaoning</author><pubDate>Sun, 06 Sep 2020 19:45:49 +0800</pubDate><description><![CDATA[锁
一、原因
开发多用户、数据库驱动的应用时，最大的一个难点是：一方面要最大程度地利用数据库的并发访问，另外一方面还要确保每个用户能以一致的方式读取和修改数据。
数据库系统使用锁是为了支持对共享资源进行并发访问，提供数据的完整性和一致性。
二、lock 与 latch的比较

三、InnoDB存储引擎中的锁
1. 行级锁的类型
InnoDB存储引擎实现了以下两种标准的行级锁：

共享锁（S Lock），允许事务读一行数据；
排他锁（X Lock），允许事务删除或更新一行数据。

如果一个事务T1已经获得了行]]></description><category></category></item><item><title><![CDATA[MySQL——InnoDB和MyISAM存储引擎的区别]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108421770</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108421770</guid><author>guanmaoning</author><pubDate>Sat, 05 Sep 2020 16:58:08 +0800</pubDate><description><![CDATA[InnoDB： MySQL默认的事务型引擎，也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务，短期事务大部分情况下是正常提交的，很少被回滚。InnoDB的性能与自动崩溃恢复的特性，使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎，否则应该优先考虑InnoDB引擎。
MyISAM： 在MySQL 5.1 及之前的版本，MyISAM是默认引擎。MyISAM提供的大量的特性，包括全文索引、压缩、空间函数（GIS）等，但MyISAM并不支持事务以及行级锁，而且一个毫无疑问的缺]]></description><category></category></item><item><title><![CDATA[MySQL体系结构和存储引擎]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108420968</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108420968</guid><author>guanmaoning</author><pubDate>Sat, 05 Sep 2020 16:23:06 +0800</pubDate><description><![CDATA[MySQL数据库
一、数据库基础概念
1. 数据库
数据库（database） 是保存有组织的数据的容器（通常是一个文件或一组文件）。
理解数据库的一种最简单的办法是将其想象为一个文件柜。此文件柜是一个存放数据的物理位置，不管数据是什么以及如何组织的。
2. 数据库软件
数据库软件应称为DBMS（数据库管理系统），如 MySQL。数据库是通过DBMS创建和操纵的容器。
二、MySQL体系结构

MySQL由以下几部分组成：

连接池组件
管理服务和工具组件
SQL接口组件
查询分析器组件
优化器组件
缓冲（]]></description><category></category></item><item><title><![CDATA[数据库基础知识——用正则表达式进行搜索（使用技巧）]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108386982</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108386982</guid><author>guanmaoning</author><pubDate>Thu, 03 Sep 2020 17:09:29 +0800</pubDate><description><![CDATA[使用MySQL正则表达式
为了下面的展示，我们创建了 crashcourse 数据库：
CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

crashcourse 是我自己设置的数据库的名称，下面的使用示例，都是使用这个数据库。
为了下面的展示，我们还需要为 crashcourse 数据库创建一些表和往表中插入一些记录， 相关的 SQL 文件有：

创建表：create.sql
插入数据：popul]]></description><category></category></item><item><title><![CDATA[数据库基础知识——用正则表达式进行搜索]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108386399</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108386399</guid><author>guanmaoning</author><pubDate>Thu, 03 Sep 2020 16:39:12 +0800</pubDate><description><![CDATA[使用MySQL正则表达式
为了下面的展示，我们创建了 crashcourse 数据库：
CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

crashcourse 是我自己设置的数据库的名称，下面的使用示例，都是使用这个数据库。
为了下面的展示，我们还需要为 crashcourse 数据库创建一些表和往表中插入一些记录， 相关的 SQL 文件有：

创建表：create.sql
插入数据：popul]]></description><category></category></item><item><title><![CDATA[正则表达式全集]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108384547</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108384547</guid><author>guanmaoning</author><pubDate>Thu, 03 Sep 2020 16:10:37 +0800</pubDate><description><![CDATA[字符
描述




\
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如，“n”匹配字符“n”。“\n”匹配一个换行符。串行“\\”匹配“\”而“\(”则匹配“(”。


^
匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性，^也匹配“\n”或“\r”之后的位置。


$
匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性，$也匹配“\n”或“\r”之前的位置。


*
匹配前面的子表达式零次或多次。例如，...]]></description><category></category></item><item><title><![CDATA[数据库基础知识——SELECT 语句（排序检索数据）]]></title><link>https://blog.youkuaiyun.com/guanmaoning/article/details/108369749</link><guid>https://blog.youkuaiyun.com/guanmaoning/article/details/108369749</guid><author>guanmaoning</author><pubDate>Wed, 02 Sep 2020 20:31:50 +0800</pubDate><description><![CDATA[SQL使用
SQL（发音为字母S-Q-L或sequel）是结构化查询语言（Structured Query Language）的缩写。SQL是一种专门用来与数据库通信的语言。
SQL 语言特点：

SQL 语言不区分大小写；
在命令行窗口的 SQL 语句要以分号 ; 结束。

为了下面的展示，我们创建了 crashcourse 数据库：
CREATE DATABASE crashcourse DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

crash]]></description><category></category></item></channel></rss>