自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chrisnotfound

竹杖芒鞋轻胜马,谁怕?

  • 博客(11)
  • 收藏
  • 关注

原创 TCP Keepalive机制与应用层心跳Heartbeat

TCP长连接中可能出现的问题1.     很多防火墙路由器等对于空闲socket自动关闭2.     对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制.于是,就有了心跳(HeartBeat)机制。心跳机制的两种实现方案目前而言,有两种方式实现TCP的保活(业内现状是IM方面几乎都采用第一种)1.     应用层协议自己实现的心跳机制很多应用层协议都有HeartBeat机...

2018-04-27 20:06:20 3848 2

原创 理解TCP长连接(Keepalive)

TCP Keepalive的起源TCP协议中有长连接和短连接之分。短连接环境下,数据交互完毕后,主动释放连接;长连接的环境下,进行一次数据交互后,很长一段时间内无数据交互时,客户端可能意外断电、死机、崩溃、重启,还是中间路由网络无故断开,这些TCP连接并未来得及正常释放,那么,连接的另一方并不知道对端的情况,它会一直维护这个连接,长时间的积累会导致非常多的半打开连接,造成端系统资源的消耗和浪费,且...

2018-04-27 17:59:32 60923

原创 理解Socket

Socket的概念什么是Socket?很多博客总结的不到位。这里做一个全面的解释。基本原理的角度来看,Socket起源于Unix,Unix/Linux基本哲学之一就是“一切皆文件”,Socket是一种"打开—读/写—关闭"模式的实现,可以被认为是服务器和客户端各自维护的一种特殊文件,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。进程通信的角度来看,Sock...

2018-04-27 15:30:39 247

原创 Linux加载启动可执行程序的过程(二)解释器完成动态链接

接着上一篇博客。前面的工作都是在内核完成的,接下来会回到用户空间。第一步,解释器(也可以叫动态链接器)首先检查可执行程序所依赖的共享库,并在需要的时候对其进行加载。ELF 文件有一个特别的节区: .dynamic,它存放了和动态链接相关的很多信息,例如动态链接器通过它找到该文件使用的动态链接库。不过,该信息并未包含动态链接库的绝对路径,但解释器通过 LD_LIBRARY_PATH 参数可以找到(它...

2018-04-25 17:12:29 3307 1

原创 Linux加载启动可执行程序的过程(一)内核空间加载ELF的过程

linux内核启动时将ELF格式注册到内核可支持的文件格式链表中,也就是通过register_binfmt 函数将定义的elf_format结构体添加到链表中。该结构体如下:当我们执行一个可执行程序的时候, 内核会list_for_each_entry遍历所有注册的linux_binfmt对象, 对其调用load_binrary方法来尝试加载, 直到加载成功为止。上面代码可以看倒,ELF中加载程序...

2018-04-25 17:07:12 6355

原创 剑指offer算法题汇总(java版)

1.二维数组中的查找题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。题目思路读取矩阵最右上角的元素,也就是第一行最后一列的元素开始遍历判断 public boolean Find(int target, int [][] array) { if(arr...

2018-04-21 17:40:00 503 1

原创 必考算法总结(java版)

树的遍历先序遍历递归版本 public static void preorderTraversal(List<Integer> list,TreeNode root){ if(root==null) return; list.add(root.value); preorderTraversal1(list,r...

2018-04-21 13:44:42 266

原创 Wine中PE格式文件的加载(三):PE格式文件的加载

前面分析到ntdll中加载了kernel32,然后调用了kernel32的初始化函数__wine_kernel_init。该函数的实现在dlls/kernel32/process.c中。内容较多,就不完整截图了首先函数开始获取了需要加载的windows应用的路径名,这个就是在开始执行的命令的微信的绝对路径,在wine中一般为“/home/username/.wine/drive_c/Program...

2018-04-16 10:46:16 1269

原创 Wine中PE格式文件的加载(二):Wineserver初始化过程

Wineserver的初始化过程就在thread_init函数中进行的。具体分析thread_init函数(在ntdll/thread.c中)1.     创建了TEB,PEB等数据结构。2.     通过server_init_process()与服务进程建立socket连接。在此过程中,如果连接失败就说明服务进程尚不存在,此时要通过start_server()先fork()一个子进程,让其执行...

2018-04-16 10:41:04 1768

原创 Wine中PE格式文件的加载(一):Wine初始化过程

首先了解下Wine初始化过程。我们执行”wine WeChat.exe”命令,发生的过程是怎么样的?接下来从wine源码一步步分析函数调用过程。在loader/目录下的源码编译,由main.c生成了“wine”Linux可执行文件;preloader.c生成了“pre-loader”Linux可执行文件。假设在终端通过命令“wine  WeChat.exe”启动微信;该过程涉及preloader,...

2018-04-16 10:38:59 3105

原创 linux系统调用过程理解

用户可以通过两种方式使用系统调用:第一种方式是通过C库函数,包括系统调用在C库中的封装函数和其他普通函数。(如write,read,kill,mkdir等函数)第二种方式是使用_syscall宏。2.6.18版本之前的内核,在include/asm-i386/unistd.h文件中定义有7个_syscall宏,分别是:_syscall0(type,name) _syscall1(type,na...

2018-04-08 20:36:33 348

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除