
语言(C/C++/JAVA/Python)
文章平均质量分 94
一水先生
这个作者很懒,什么都没留下…
展开
-
调试器工作原理之二——实现断点
本文是关于调试器工作原理探究系列的第二篇。在开始阅读本文前,请先确保你已经读过本系列的第一篇(基础篇)。本文的主要内容这里我将说明调试器中的断点机制是如何实现的。断点机制是调试器的两大主要支柱之一 ——另一个是在被调试进程的内存空间中查看变量的值。我们已经在第一篇文章中稍微涉及到了一些监视被调试进程的知识,但断点机制仍然还是个迷。阅读完本文之后,这将不再是什么秘密了。软中断要在转载 2012-09-05 23:02:48 · 1169 阅读 · 0 评论 -
TCP链接主动关闭不发fin包奇怪行为分析
TCP链接主动关闭不发fin包奇怪行为分析问题描述:多隆同学在做网络框架的时候,发现一条tcp链接在close的时候,对端会收到econnrest,而不是正常的fin包. 通过抓包发现close系统调用的时候,我端发出rst报文, 而不是正常的fin。这个问题比较有意思,我们来演示下:$ erlErlang R14B03 (erts-5.8.4) [64-bit]转载 2012-09-12 00:20:17 · 2980 阅读 · 0 评论 -
gdb调试器之"测不准原则"
gdb调试器之"测不准原则" 2012-05-07 22:25:30| 分类:gdb源代码分析 |字号 订阅一、测不准原则我大学物理学的不太好,特别是高等物理,这个概念是在很多科普性的读物中都可以见到,就像”罗素悖论“、哥德尔的”不完备理论“、爱因斯坦的”相对论“等,大家都是一知半解,然后根据这个概念大家自由发挥,所以就有千奇百怪的场景和理解了,最后以讹转载 2012-09-03 07:51:45 · 3590 阅读 · 0 评论 -
gdb基本命令及处理框架
gdb基本命令及处理框架 2011-09-03 21:52:51| 分类:gdb源代码分析 |字号 订阅一、调试gdb如果使用gdb的调试,会发现gdb在配置的时候(执行./configure)的时候并没有提供禁止优化的编译选项,也就是-O2的禁止。虽然一些资料上介绍可以通过--disable-optimization来禁止优化,但是gdb的配置转载 2012-09-03 07:48:20 · 1632 阅读 · 0 评论 -
GDB/ARMulator 学习笔记 v0.0
GDB/ARMulator 学习笔记 v0.0teawater@hotmail.com1.GDB/ARMulator基本介绍GDB/ARMulator是GDB自带的一个Armulator(ARM模拟器,实际上应该是有不止一个软件包含这个功能,例如ADS,他们都叫Armulator),不过我查看GDB的源代码都是对ARM6的模拟,而现在比较常见的是打过uclinux开发组pa转载 2012-09-03 07:36:22 · 900 阅读 · 0 评论 -
调试器工作原理——基础篇
#include int main(){printf(“Hello, world!n”);return 0;}本文是一系列探究调试器工作原理的文章的第一篇。我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起。关于本文我打算在这篇文章中介绍关于Linux下的调试器实现的主要组成部分——ptrace系统调用。本文中出现的代码都在转载 2012-09-05 23:04:22 · 1052 阅读 · 0 评论 -
tcp中发送/确认及文件缓冲
tcp中发送/确认及文件缓冲 2012-08-15 00:18:42| 分类:Linux内核 |字号 订阅一、粘包问题TCP传输是一种基于流(stream)的传输方式,这个流是对应于udp的数据报格式的传输方式。在数据报传输格式中,每次传输的是一个单位,可以认为他是一个离散的信号,每次发送一个报单位。而流则是细水长流的流,它的数据可以持续的发送,接收和发转载 2012-09-03 07:40:03 · 1086 阅读 · 0 评论 -
gdb翻译
2.1 Invoking gdb一当GDB启动,GDB就可以从终端获得命令直到你让它退出。可以带上各种不同的参数和选项来运行GDB,来定制你的调试环境。这里描述的命令行选项可以覆盖各种不同的场景,在一些环境有些高效的选项却不能使用。最常见启动GDB的方法是仅带上指定一个执行的程序的参数: gdb program也可以启动的时候带上一个可执行程序和一个特定的cor翻译 2010-08-16 12:16:00 · 464 阅读 · 0 评论 -
gdb动态库延迟断点及线程/进程创建相关事件处理(上)
gdb动态库延迟断点及线程/进程创建相关事件处理(上) 2012-04-25 22:57:29| 分类:gdb源代码分析 |字号 订阅一、gdb对共享库符号的支持当使用gdb调试一些动态链接生成的可执行文件时,我们可能会有意或者无意的在一些不存在的函数上打断点,此时gdb并不是提示错误,而是提示是否在之后加载的动态库中添加该断点,也就是pending断点转载 2012-09-03 07:44:49 · 1119 阅读 · 0 评论 -
Linux内存映射深入分析
Linux内存映射深入分析 1)虚拟内存的解释:虚拟内存的核心概念是指代码所用的内存地址与物理地址没有关系.在用户空间中,一个进程的虚拟地址A指向不同的物理内存,而不是另一个进程的地址A.任何时候CPU发送指令向内存存取数据时,通过软件将虚拟地址的数据变为物理地址.将虚拟地址变为物理地址变为物理地址的工作是由内存管理单元(MMU)完成的.虚拟内存地址也可以转载 2012-09-06 14:04:08 · 602 阅读 · 0 评论 -
字符串与正则表达式
1、字符串String类对象是不可改变的,对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象,其方法ToString对性能的提高并非很显著。 因为一旦创建了该对象,就不能修改该对象的值在处理字符串时,最好使用StringBuilder类,其.NET 命名空间是System.Text。该类并非创建新的对象,而是通过Append,Remove,Insert转载 2012-09-18 10:37:31 · 672 阅读 · 0 评论 -
调试器工作原理之三——调试信息
试器工作原理探究系列的第三篇,在阅读前请先确保已经读过本系列的第一和第二篇。本篇主要内容在本文中我将向大家解释关于调试器是如何在机器码中寻找C函数以及变量的,以及调试器使用了何种数据能够在C源代码的行号和机器码中来回映射。调试信息现代的编译器在转换高级语言程序代码上做得十分出色,能够将源代码中漂亮的缩进、嵌套的控制结构以及任意类型的变量全都转化为一长串的比特流——这就是机器码。这么转载 2012-09-05 23:00:30 · 2281 阅读 · 0 评论 -
Hugemem和SMP区别
Hugemem和SMP区别 2012-09-07 01:04:24| 分类:RHCA_442 |字号 订阅红旗DC系列Linux操作系统(x86平台)中带有四类核心:UP (支持单内核) SMP (支持多内核) hugemem Icc* (用intel C编译器编译的核心)其中hugemem核心往往引起很多困惑,这里希望能一劳永逸地把转载 2012-09-07 07:40:09 · 1193 阅读 · 0 评论 -
UNIX系统的IO模型
其实并非原创,只是摘录了Stevens的大作《UNIX网络编程》,写下来,一、加深理解和记忆;二、书是借的,记录一下备忘。感谢臻,借我此书一阅,受益匪浅。 6.2 I/O模型阻塞式I/O;非阻塞式I/O;I/O复用;信号驱动式I/O;异步I/O;一个输入操作通常包括两个不同的阶段:1) 等待数据准备好;2) 从内核向进程复制数据;对于一个套接字上的输入操转载 2012-09-13 22:45:13 · 418 阅读 · 0 评论 -
common-lisp语言文档
http://www-prod-gif.supelec.fr/docs/cltl/cltl2.html原创 2012-11-05 11:32:53 · 466 阅读 · 0 评论 -
C++ 编程规范101读书笔记(2)设计风格
这部分主要涉及设计的风格的事宜:基本观点还是那句话,高内聚,低耦合,扩展性强,简单第5条 一个实体应该只用一个紧凑的职责 一次只解决一个问题。一个实体只负责一件事。 一个实体职责过多,导致实体多重性格,难控制 典型反例: realloc() 函数 C++ basic_str原创 2014-03-10 22:13:32 · 646 阅读 · 0 评论 -
C++ 编程规范101读书笔记(1)组织和策略问题
这部分主要涉及代码质量控制:第0条 不要拘泥小节 代码风格一致 (1)缩进体现代码结构 (2)代码行长度不要影响阅读 (3)使用一致的命名规范 (4)编写有用的注释第1条 在高告警级别干净利落地编译 (1)第三方头文件 #pragma w原创 2014-03-10 21:27:56 · 531 阅读 · 0 评论 -
无锁队列的实现
关于无锁队列的实现,网上有很多文章,虽然本文可能和那些文章有所重复,但是我还是想以我自己的方式把这些文章中的重要的知识点串起来和大家讲一讲这个技术。下面开始正文。关于CAS等原子操作在开始说无锁队列之前,我们需要知道一个很重要的技术就是CAS操作——Compare & Set,或是 Compare & Swap,现在几乎所有的CPU指令都支持CAS的原子操作,X86下对应的是 CMPXCH转载 2012-09-12 12:20:54 · 1200 阅读 · 1 评论 -
libeio源码分析 – 主流程
libeio源码分析 – 主流程@淘宝千石简介This library provides fully asynchronous versions of most POSIX functions dealing with I/O. Unlike most asynchronous libraries, this not only includes read and write,转载 2012-09-11 23:15:16 · 754 阅读 · 0 评论 -
gdb如何调用被调试任务的特定函数
gdb如何调用被调试任务的特定函数 2012-03-07 22:43:19| 分类:gdb源代码分析 |字号 订阅一、gdb中函数调用在gdb中,可以通过call function(args……)来调用一个函数,当然也可以使用print之类的函数来间接的调用一个函数,但是不管如何,它们最终都要求gdb来调用一个函数,执行该函数,取函数返回值等基本转载 2012-09-03 07:49:56 · 5459 阅读 · 0 评论 -
可执行文件---prelink对ELF文件的影响
可执行文件---prelink对ELF文件的影响 2011-07-31 13:30:16| 分类:RHCA_442 |字号 订阅【长见识】以下内容告诉我们可执行文件的hash值改变不能说明系统被入侵,有可能是prelink搞的鬼~声明:以下内容出自 李库 之手。今天下午接到安全部门的通知说,tpsc-task01服务器的sshd程序文件md5校验值发转载 2012-09-07 22:56:35 · 2393 阅读 · 0 评论 -
linux后端服务程序之信号处理
« libeio源码分析 – 主流程GLIBC 2.16 支持systemtap静态检查点 »linux后端服务程序之信号处理信号就是通知某个进程发了某个事件,也称为软件中断。信号提供了一种处理异步事件的方法。信号通常是异步发生的,进程预先不知道信号准确发生的时刻。后端程序(daemon)往往需要提供7*24不间断的服务,因此,编程daemon程序时对信号的正确处理尤为重要转载 2012-09-11 23:14:21 · 802 阅读 · 0 评论 -
Transfer 2.0 介绍
Transfer 2.0 介绍 Transfer是一个主从多线程同步工具,直接patch在MySQL中。2011年开发完成。于去年的12.12上线,并撑住高峰期主从,保证从库无延迟,使得应用能够直接从从库上读数据。 对Transfer1.0背景有兴趣的同学可以看我以前的一篇博客。新功能 Transfer第一版本存在两个可改进的点:单表转载 2012-09-11 23:12:00 · 592 阅读 · 0 评论 -
2.1.1 Choosing Files
2.1.1 Choosing Files 一旦gdb启动,可以读到任何任何参数而非选项像指定一个执行文件,core文件或者进程ID.这跟参数被"-se","-c" 或者"-p"选项分别指定了一样 (gdb读到的第一没有关联选项的参数视为跟"-se"选项之后的参数。第二个没有选项的参数,可以视为紧跟"-c"或者"-p"的参数)。如果第二个参数以数字开头,gdb首先把它作为一个进程号去关翻译 2010-08-16 12:24:00 · 295 阅读 · 0 评论 -
Java正则表达式
序返回目录 本文介绍如何使用 java.util.regex API 作为正则表达式模式匹配。虽然说这个包中可被接受的语法参数与 Perl 是相似的,但我们并不需要掌握 Perl 的语法知识。本教程将从基础开始,逐层深入到更多的高级技巧。下面是各章节的主要内容:0 引言 粗略地看一下正则表达式,同时也介绍组成 API 的核心类。1 测试用具 编写了一个简单的应用程转载 2012-09-17 21:36:04 · 462 阅读 · 0 评论 -
GDB调试器源代码分析系列--Inferior call的实现与分析(1)
[转] GDB调试器源代码分析系列--Inferior call的实现与分析(1) (2011-10-11 20:41) 标签: 分析 分类:调试器先说说几个概念:(1) 什么是inferiorGDB表示一个程序执行的状态叫inferior。一个Inferior通常情况下是和一个进程相关,但它也应用于没有进程概念的target。每次运行一个可转载 2012-09-03 07:25:12 · 2686 阅读 · 0 评论 -
C++ 编程规范101读书笔记(5)类的设计与继承
这部分主要讨论面向对象的设计的一些陷阱:主要涉及构造函数,析构函数,继承,组合,成员可见度第32条 弄清所要编写的是哪种类第33条 用小类代替巨类第34条 用组合代替继承原创 2014-03-11 15:02:59 · 588 阅读 · 0 评论 -
cmsg(3) - Linux man page
cmsg(3) - Linux man pageNameCMSG_ALIGN, CMSG_SPACE, CMSG_NXTHDR, CMSG_FIRSTHDR - access ancillary dataSynopsis#include sys/socket.h>struct cmsghdr *CMSG_FIRSTHDR(struct msghdr *msgh);struc转载 2017-02-04 10:11:12 · 1178 阅读 · 0 评论