<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Quarrie的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Quarrie</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Quarrie]]></copyright><item><title><![CDATA[C语言调用汇编命令实现]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/112550052</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/112550052</guid><author>Quarrie</author><pubDate>Tue, 12 Jan 2021 23:26:19 +0800</pubDate><description><![CDATA[C语言调用机器码令实现


编写被调用C代码
#include &lt;stdio.h&gt;
int add(int a,int b){
    return a+b;
}



编译，注意添加*-c*参数，不然会因为没有main函数报错
gcc -c add.c



获得编译后文件的机器码
objdump -j .text -d add.o

执行命令结果如下：

add.o:     file format elf64-x86-64


Disassembly of section .text:

]]></description><category></category></item><item><title><![CDATA[Java探针-基于javaagent的http请求记录]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/107030193</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/107030193</guid><author>Quarrie</author><pubDate>Mon, 29 Jun 2020 23:44:07 +0800</pubDate><description><![CDATA[在了解javaagent的创建后，今天将尝试一种更高级的用法——类替换，并用其实现Http请求地址的记录功能。javaagent允许我们在项目启动时的类加载阶段或者项目运行后进行类的替换，两者的替换方式相同，都是借助入口函数Instrumentation对象进行操作，回顾下两种方式的入口函数：

1.perman入口函数，由JVM参数配置在程序启动时的类加载阶段引入

详见《Java探针-javaagent由浅入深（一）》



 

import java.lang.instrument.Instrume]]></description><category></category></item><item><title><![CDATA[jackson-databind远程代码执行漏洞（CVE-2020-8840）修复与测试]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/105902299</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/105902299</guid><author>Quarrie</author><pubDate>Sun, 03 May 2020 13:54:06 +0800</pubDate><description><![CDATA[漏洞介绍
攻击者可以利用此漏洞通过JNDI注入的方式执行本地Web容器下的任意代码，后文中将测试LDAP方式的远程代码调用，受影响版参见：NVD。
修复建议
网上能找到的大部分修复建议是将jackson-databind的版本升级到2.9.10.4或后续版本，此方法的确行之有效，但是对于使用JDK1.6的老项目就比较尴尬，因为至2.8版本后jackson-databind字节码不再兼容JDK1.6...]]></description><category></category></item><item><title><![CDATA[C语言实现双向共享栈]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104419750</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104419750</guid><author>Quarrie</author><pubDate>Thu, 20 Feb 2020 22:38:34 +0800</pubDate><description><![CDATA[ShareStack.h


#pragma once
/*
顺序表的两端分别作为双栈的栈底，当整个线性表没有空间时，双栈满
*/
#define MAX_SIZE 20
#define ERROR -1
#define OVERFLOW -2
#define LEFT 0
#define RIGHT 1
typedef char ElemType;

typedef struct {
	Elem...]]></description><category></category></item><item><title><![CDATA[C语言实现双端循环队列]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104402199</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104402199</guid><author>Quarrie</author><pubDate>Wed, 19 Feb 2020 22:28:00 +0800</pubDate><description><![CDATA[DeQueue.h


#pragma once
/*
双端队列（注：不是双向队列）：是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出，其限定插入和删除操作在表的两端进行。
*/


#define MAX_SIZE 20
#define ElemType int
#define OVERFLOW -2
#define ERROR -1


typedef struct {
	E...]]></description><category></category></item><item><title><![CDATA[C语言实现循环队列]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104245412</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104245412</guid><author>Quarrie</author><pubDate>Mon, 10 Feb 2020 11:04:31 +0800</pubDate><description><![CDATA[SequenceQueue.h


#pragma once

#define ElemType char
#define QuenueSize 5

#define ERROR -1
#define OVERFLOW -2

typedef struct SequenceQueue {
	ElemType* base;
	int front;
	int rear;
	int size;
} Qu...]]></description><category></category></item><item><title><![CDATA[C语言实现链队列]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104198492</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104198492</guid><author>Quarrie</author><pubDate>Thu, 06 Feb 2020 16:47:35 +0800</pubDate><description><![CDATA[LinkQueue.h


#pragma once

#define ElemType char
#define ERROR -1
#define OVERFLOW -2

typedef struct QueueNode{
	ElemType data;
	struct QueueNode* next;
} Node,*PNode;

typedef struct {
	PNode front...]]></description><category></category></item><item><title><![CDATA[C语言链栈实现]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104181205</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104181205</guid><author>Quarrie</author><pubDate>Wed, 05 Feb 2020 12:58:42 +0800</pubDate><description><![CDATA[LinkStack.h


#pragma once
#include &lt;stdlib.h&gt;

#define SElemType char
#define ERROR -1
#define OVERFLOW -2
typedef struct L_Stack
{
	SElemType data;
	struct L_Stack* next;
}*Stk,Stack;

/**
以链表...]]></description><category></category></item><item><title><![CDATA[C语言顺序栈实现]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104172514</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104172514</guid><author>Quarrie</author><pubDate>Tue, 04 Feb 2020 17:41:58 +0800</pubDate><description><![CDATA[S_Stack.h


#pragma once

#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;

//栈数据类型
#define SElemType char
//栈初始大小
#define SSize 5
//栈扩容增量
#define SInc 5
//内存溢出异常
#define OVERFLOW -2
//错误
#define ER...]]></description><category></category></item><item><title><![CDATA[C语言单向链表实现]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/104160485</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/104160485</guid><author>Quarrie</author><pubDate>Mon, 03 Feb 2020 19:07:40 +0800</pubDate><description><![CDATA[LinkList.h


#pragma once
typedef int SDataType;
//链表节点	
typedef struct SListNode {
	SDataType _data;
	struct SListNode* _PNext;
}Node,*PNode;

typedef struct SList { //封装链表结构，类似于头节点
	PNode _pHead;//指...]]></description><category></category></item><item><title><![CDATA[Arch Linux下"Network is unreachable"解决办法]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/103812246</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/103812246</guid><author>Quarrie</author><pubDate>Thu, 02 Jan 2020 22:28:02 +0800</pubDate><description><![CDATA[一、首先确定你的问题是否与此相同

Arch Linux更新后大部分网站无法访问，使用Ping命令出现“Network is unreachable”，部分网站可以Ping通，比如：www.baidu.com。

二、解决方案

以root用户执行dhcpcd命令;
	重新启动系统;
	使用ip a命令查看对应网卡是否正确分配了ipv4地址，如下：
	
	
inet 192.168.1.9/24 ...]]></description><category></category></item><item><title><![CDATA[「札记」Java中类的概念]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/103358445</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/103358445</guid><author>Quarrie</author><pubDate>Mon, 02 Dec 2019 22:37:46 +0800</pubDate><description><![CDATA[很久以前，计算机科学家就认识到了数据和操作之间的这种紧密关系。这种关系催生了抽象数据类型（abstract data type，ADT）这一思想。抽象数据类型是由一个表示数据项的抽象对象集合和一些列对这些对象所做的操作构成的。（……）虽然抽象数据类型可以用Pascal这样传统的面向过程语言来实现，但用C++和Java这样的面向对象语言来实现要更为方便，这些语言用类（class）来支持抽象数据类型。...]]></description><category></category></item><item><title><![CDATA[原码、反码、补码]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/103228996</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/103228996</guid><author>Quarrie</author><pubDate>Mon, 25 Nov 2019 22:17:55 +0800</pubDate><description><![CDATA[前言：每次声明整形变量时都会思考一个问题，为什么最大值和最小值不是关于“0”点对称的两个数，比如在java中byte类型的最大值是127，最小值是-128。其实这个问题并不难，只要知道机器数的存储方式就能找出答案，但是因为这个问题引发了我之后的一系列思考……



现在就从最初的问题开始，记录下我思考的过程。

一、机器数

机器数是将符号"数字化"的数，是数字在计算机中的二进制表示形式。机器数...]]></description><category></category></item><item><title><![CDATA[Java探针-javaagent由浅入深（二）]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/103109274</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/103109274</guid><author>Quarrie</author><pubDate>Sun, 17 Nov 2019 16:38:32 +0800</pubDate><description><![CDATA[这篇文章主要介绍如何通过maven工具构建javaagent，实质原理相同，只是借助maven工具更符合工作中的应用场景，所以简单介绍下，同时将着重介绍一种在运行时引入javaagent的方法。

一、利用maven工具构建javaagent

1、创建maven项目

2、按照前文中的方法创建Agent类，并正确编写permain(String,Instrumentation)方法

3、编写m...]]></description><category></category></item><item><title><![CDATA[Java探针-javaagent由浅入深（一）]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/102470257</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/102470257</guid><author>Quarrie</author><pubDate>Wed, 09 Oct 2019 22:33:36 +0800</pubDate><description><![CDATA[前言（可忽略）：近来因为公司要对我所负责的系统进行安全性的检测，项目需要引入VulHunter这个工具，引入的方式正是在Web容器上添加javaagent作为JVM参数，如：-javaagent:/home/haye/vulhunter.jar。这种引入对我的项目代码本身可以说是零侵入，但却实实在在的扫描到了项目存在的漏洞，对此甚为好奇，遂决定研究下javaagent的用法。

javaagent...]]></description><category></category></item><item><title><![CDATA[Java语言Scoket编程进阶（一）（多线程、双向通信）]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/102316954</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/102316954</guid><author>Quarrie</author><pubDate>Mon, 07 Oct 2019 18:59:59 +0800</pubDate><description><![CDATA[在《Java语言Scoket编程及实现原理浅析》一文中介绍了Java中Socket、ServerSocket的基本使用方法，本文将介绍一些Socket的进阶用法，实现一个多人的聊天室，技术要点主要包含以下两个方面：

一、Socket结合线程使用，实现服务端对客户端的一对多链接（TCP协议）

我们知道对于单个服务端的IP和端口是固定的，即我们在创建ServerSocket对象时传入的构造参数，那...]]></description><category></category></item><item><title><![CDATA[Java语言Scoket编程及实现原理浅析]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/93392336</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/93392336</guid><author>Quarrie</author><pubDate>Sun, 23 Jun 2019 20:08:23 +0800</pubDate><description><![CDATA[上一篇文章中介绍了C语言的Socket编程，其主要目的是说明Socket实现是基于网络层IP协议和传输层TCP协议或UDP协议的，网络层、传输层的协议又是操作系统来实现的，所以在C语言中不同操作系统对应着不同的函数库调用，而Java语言具有平台无关性，也就是说不会因操作系统不同而依赖不同的类库，这篇文章将介绍基本的Socket编程及Java层面的实现原理。

一、Java语言Socket编程

服...]]></description><category></category></item><item><title><![CDATA[C语言socket编程]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/90522784</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/90522784</guid><author>Quarrie</author><pubDate>Fri, 24 May 2019 22:26:35 +0800</pubDate><description><![CDATA[这篇文章的侧重点不是讲如何用C语言写好，甚至是写出一个完整的Socket服务端/客户端（以我单薄的C语言编程能力也很难做到），而是因为C语言更加接近底层，个人觉得为了今后更好的学习互联网数据传递而去了解底层的实现是有一定必要的（这里的底层也将随着我个人的经验和对语言的掌握程度逐步向下加深）。

C语言在Linux和Windows上实现Socket的源码大致相同，笼统的可以分为以下四个步骤：

1、...]]></description><category></category></item><item><title><![CDATA[VirtualBox下安装MS-DOS及MASM——搭建汇编语言环境]]></title><link>https://blog.youkuaiyun.com/Quarrie/article/details/82111057</link><guid>https://blog.youkuaiyun.com/Quarrie/article/details/82111057</guid><author>Quarrie</author><pubDate>Mon, 27 Aug 2018 14:54:46 +0800</pubDate><description><![CDATA[一、准备工作

1、下载并安装Oracle VM VirtualBox

2、下载MS-DOS6.22安装文件（推荐去MSDN的官网下载）

这里推荐下载英文的6.22版本，下载后是一个EXE格式自解压文件，解压后可以在目录下找到&lt;DISKS&gt;文件夹，文件夹内包含了1.22UPG#（1-4）、1.44UPG#（1-3）两种大小不同的软盘镜像文件，我猜想是为了兼容当年的两种软盘规格，因为...]]></description><category></category></item></channel></rss>