<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[popvip44的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/popvip44</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; popvip44]]></copyright><item><title><![CDATA[vscode配置vim]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/147767139</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/147767139</guid><author>popvip44</author><pubDate>Wed, 07 May 2025 16:22:33 +0800</pubDate><description><![CDATA[这样可以实现传统vim中gd命令查找当前光标指向的单词。按下gd之后，可以继续用n或者N来上下跳转。]]></description><category></category></item><item><title><![CDATA[CPU0文件解析系列--第一章--概述]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/131639177</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/131639177</guid><author>popvip44</author><pubDate>Mon, 10 Jul 2023 16:42:43 +0800</pubDate><description><![CDATA[【代码】CPU0文件解析系列--第一章--概述。]]></description><category></category></item><item><title><![CDATA[CPU0 verilog代码全注释]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/131632856</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/131632856</guid><author>popvip44</author><pubDate>Mon, 10 Jul 2023 10:23:43 +0800</pubDate><description><![CDATA[【代码】CPU0 verilog代码全注释。]]></description><category></category></item><item><title><![CDATA[从一行c代码到0101（LLVM，RISCV）]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/131556837</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/131556837</guid><author>popvip44</author><pubDate>Wed, 05 Jul 2023 17:30:38 +0800</pubDate><description><![CDATA[本文希望力求精简的解释一行c代码是如何变成一段二进制编码，又是如何进入cpu被执行的。]]></description><category></category></item><item><title><![CDATA[bind(0)导致的临时端口用尽引发的思考（IP_BIND_ADDRESS_NO_PORT）]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/82855879</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/82855879</guid><author>popvip44</author><pubDate>Thu, 27 Sep 2018 17:31:16 +0800</pubDate><description><![CDATA[tips:本文使用的Linux源码版本为3.10.20，最新的版本已经对本文描述的问题做了优化。

tips:本文不讨论扩大Linux可用端口范围、SO_REUSEADDR、SO_REUSEPORT等优化方法，仅讨论patch：https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=90c337da...]]></description><category></category></item><item><title><![CDATA[记录一个诡异的函数调用返回错误的指针bug]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/80509960</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/80509960</guid><author>popvip44</author><pubDate>Wed, 30 May 2018 15:20:33 +0800</pubDate><description><![CDATA[//main.c#include &quot;test.h&quot;
void main(){
    S* s = get_struct_s();
    printf(&quot;%s\n&quot;,s-&amp;gt;name);
    return 0;
}//test.h
typedef struct S_{
    ...
    char name[8];
} S;S* s_array[10];

//test.c
#inc...]]></description><category></category></item><item><title><![CDATA[编译错误storage class specified for parameter XXX]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/79373150</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/79373150</guid><author>popvip44</author><pubDate>Mon, 26 Feb 2018 09:09:47 +0800</pubDate><description><![CDATA[考虑如下两个头文件test.h和main.h//test.h
#include&amp;lt;stdio.h&amp;gt;

void add(int a, int b)//main.h#include&quot;test.h&quot;typedef struct A_{        int data;} A;void del(int a);编译器编译时，会将main.h内include的文件展开，即main.h变为：//ma...]]></description><category></category></item><item><title><![CDATA[SQL Injection绕过技巧]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/79336777</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/79336777</guid><author>popvip44</author><pubDate>Mon, 19 Feb 2018 11:55:58 +0800</pubDate><description><![CDATA[来源：https://www.cnblogs.com/joy-nick/p/5774462.html0x00 sql注入的原因sql注入的原因，表面上说是因为 拼接字符串，构成sql语句，没有使用 sql语句预编译，绑定变量。但是更深层次的原因是，将用户输入的字符串，当成了 “sql语句” 来执行。比如上面的 String sql = &quot;select id,no from user where i...]]></description><category></category></item><item><title><![CDATA[实验吧---简单的登陆题（CBC字节翻转攻击）]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/79335189</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/79335189</guid><author>popvip44</author><pubDate>Sun, 18 Feb 2018 20:43:27 +0800</pubDate><description><![CDATA[具体原理就不介绍了，百度上很多，直接放代码。因为用python3执行pcat大神的脚本出现很多语法和编码问题，所以打算用php脚本重写一遍攻击过程。第一步：填写0 2nion select * from((select 1)a join (select * from you_want)b join (select 3)c);%00提交后取得返回的cipher,替换php中的字符串，执行php文件，...]]></description><category></category></item><item><title><![CDATA[windows php7添加openssl支持]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/79334162</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/79334162</guid><author>popvip44</author><pubDate>Sun, 18 Feb 2018 11:12:38 +0800</pubDate><description><![CDATA[网上有许多教程，但是如果下载的是php7的压缩包，解压后需要重命名目录下的php.ini-production为php.ini，并拷贝到C:\windows。然后再照着其他教程在php.ini中进行关于openssl支持的修改。...]]></description><category></category></item><item><title><![CDATA[初识Linux栈溢出攻击]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/78304288</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/78304288</guid><author>popvip44</author><pubDate>Sat, 21 Oct 2017 16:08:21 +0800</pubDate><description><![CDATA[初识Linux栈溢出攻击0x00 限定条件1、关闭aslr(Address Space Layout Randomization)
  开启aslr后，应用程序或动态链接库装载时，系统会随机设定其装载基址。这样就避免了攻击者事先预知特定函数的入口地址。ubuntu下的关闭命令为echo 0 >/proc/sys/kernel/randomize_va_space，该命令需要事先通过su提升到root]]></description><category></category></item><item><title><![CDATA[C++多态：深入CRTP，理解编译期的多态]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/72910201</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/72910201</guid><author>popvip44</author><pubDate>Thu, 08 Jun 2017 11:20:51 +0800</pubDate><description><![CDATA[虚函数带来的额外CPU消耗 考虑如下的代码：class D {
public:
    int num;
    D(int i = 0) { num = i; }
    virtual void print() { cout << "I'm a D. my num=" << num << endl; }
};
class E :public D {
public:
    E(int i = 0]]></description><category></category></item><item><title><![CDATA[Likes Dislike Improving Performance in C++ with Compile Time Polymorphism]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/72909876</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/72909876</guid><author>popvip44</author><pubDate>Thu, 08 Jun 2017 08:57:06 +0800</pubDate><description><![CDATA[来源：https://www.gamedev.net/resources/_/technical/general-programming/improving-performance-in-c-with-compile-time-polymorphism-r2015Virtual functions are one of the most interesting and useful features]]></description><category></category></item><item><title><![CDATA[C++多态：深入虚函数，理解晚绑定]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/72763004</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/72763004</guid><author>popvip44</author><pubDate>Fri, 26 May 2017 09:34:39 +0800</pubDate><description><![CDATA[C++的多态特性是通过晚绑定实现的。晚绑定（late binding），指的是编译器或解释器程序在运行前，不知道对象的类型。使用晚绑定，无需检查对象的类型，只需要检查对象是否支持特性和方法即可。 
 在C++中，晚绑定通常发生在使用virtual声明成员函数时。此时，C++创建一个虚函数表，当某个函数被调用时需要从这个表中查找该函数的实际位置。通常，晚绑定也叫做动态函数分派(dynamic disp]]></description><category></category></item><item><title><![CDATA[STL：深入mem_fun]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/72674326</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/72674326</guid><author>popvip44</author><pubDate>Wed, 24 May 2017 18:32:23 +0800</pubDate><description><![CDATA[mem_fun所用的模板的具体化 仿函数是一种具有函数特质的对象,由于内部重载了括号操作符(),所以调用者可以像使用函数一样使用仿函数。
 mem_fun()是一个适配器(adapter)，该函数能将类的成员函数包装成仿函数使用，于是成员函数可以搭配各种泛型算法完成所谓的多态调用。
 具体例子如下面的代码所示。用vector<D*>存放E和F的指针，在泛型算法for_each()中使用D的成员函数p]]></description><category></category></item><item><title><![CDATA[MongoDB是如何实现事务的ACID？]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/71487425</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/71487425</guid><author>popvip44</author><pubDate>Tue, 09 May 2017 19:02:51 +0800</pubDate><description><![CDATA[原文地址：http://www.ywnds.com/?p=6386&viewuser=33

MongoDB ACID事务支持
这里要有一定的关系型数据库的事务的概念，不然不一定能理解的了这里说的事务概念。
下面说一说MongoDB的事务支持，这里可能会有疑惑，前面我们在介绍MongoDB时，说MongoDB是一个NoSQL数据库，不支持事务。这里又介绍MongoDB的事务。这里要说明一下]]></description><category></category></item><item><title><![CDATA[MongoDB_Architecture_Guide(MongoDB架构指导个人翻译)]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/71042213</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/71042213</guid><author>popvip44</author><pubDate>Mon, 01 May 2017 17:19:05 +0800</pubDate><description><![CDATA[完整文档见我的资源：http://download.youkuaiyun.com/detail/popvip44/9830094 
“MongoDB并不是一个闭门造车得到的产物。我们基于我们自己设计大规模，高实用性，稳定系统的经验，构建了MongoDB。我们并不是从头开始设计，而是在已有的系统中找到被破坏的地方，然后修补它们。所以我认为，如果你学习过MySQL，然后把关系数据模型转换为基于文件的数据模型，你将获]]></description><category></category></item><item><title><![CDATA[sqlite锁机制概述]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/69055990</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/69055990</guid><author>popvip44</author><pubDate>Tue, 04 Apr 2017 11:08:37 +0800</pubDate><description><![CDATA[sqlite的锁的粒度比较粗，是数据库级别的，也就是说即使只是对某个页进行读写操作，sqlite也会封锁整个数据库。这种策略降低了读-写事务和写-写事务间的并发程度，但是大大简化了程序设计，减小了整个程序的大小。所以，sqlite的适用场景为：较少次写入数据，大量、多次读出数据。这也是sqlite作为一款嵌入式数据库的设计初衷。读、写事务获取锁的过程sqlite读事务获取锁的过程：UNLOCKED-]]></description><category></category></item><item><title><![CDATA[索引并发(蟹行协议和B-Link树)]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/57468202</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/57468202</guid><author>popvip44</author><pubDate>Sun, 26 Feb 2017 20:54:27 +0800</pubDate><description><![CDATA[索引并发事务的并发问题可以通过两阶段封锁协议（2PL）或者多版本并发控制（mvcc）等方法解决。这些方法也同样适用于索引的并发访问控制。但是，由于索引访问频繁，它们将成为封锁竞争的集中点，导致低并发度。对事务而言，对一个索引查找两次，并在期间发现索引结构发生变化，这是完全可以接受的，只要索引查找返回正确的元组集。因此，只要维护索引的准确性，对索引进行非可串行化井发存取是可接受的。蟹行协议● 当搜索一]]></description><category></category></item><item><title><![CDATA[SQLite剖析之事务处理技术]]></title><link>https://blog.youkuaiyun.com/popvip44/article/details/54948961</link><guid>https://blog.youkuaiyun.com/popvip44/article/details/54948961</guid><author>popvip44</author><pubDate>Thu, 09 Feb 2017 16:51:07 +0800</pubDate><description><![CDATA[原文章地址：http://www.cnblogs.com/5211314jackrose/p/5818124.html

前言
　　事务处理是DBMS中最关键的技术，对SQLite也一样，它涉及到并发控制，以及故障恢复等等。在数据库中使用事务可以保证数据的统一和完整性，同时也可以提高效率。假设需要在一张表内一次插入20个人的名字才算是操作成功，那么在不使用事务的情况下，如果插入过程中出现异常]]></description><category></category></item></channel></rss>