2019年3月6日

摘要: 一、coredump文件这种文件通俗的说法叫进程转储,其中比较洋气的“转储”就是dump的翻译,这个词在计算机中用的比较多,所以建议大家多用,显得比较专业。在windows下可以通过MiniDumpWriteDump这个API来直接生成一个运行进程的转储文件。这个API的名字集成了windows A 阅读全文
posted @ 2019-03-06 21:52 tsecer 阅读(829) 评论(0) 推荐(0) 编辑
摘要: 一、动态链接工具ldd和ldconfig是动态链接的两个重要辅助工具,所谓“辅助”,是相对于真正的主角动态链接器ld.so,说它是工具,是只它相对于配置文件/etc/ld.so.conf文件。ldd不直接参与链接过程,它依赖于ld.so,但是ld.so不依赖于这个工具,事实上,ldd只是一个脚本,它 阅读全文
posted @ 2019-03-06 21:51 tsecer 阅读(1086) 评论(0) 推荐(0) 编辑
摘要: 一、动态搜索与静态搜索这里的动态搜索是指通过dlopen+dlsym来搜索动态库符号的过程,而静态搜索则是指程序在运行的过程中的惰性链接实现。这里其实又是一个比较边界的问题,但是也是可能存在的,另外这些问题可以促使感兴趣的同学看一下真正的实现代码。问题是这样的:假设说一个静态链接的文件通过dlope 阅读全文
posted @ 2019-03-06 21:51 tsecer 阅读(483) 评论(0) 推荐(0) 编辑
摘要: 一、so文件的加载地址so文件一般在程序刚启动的时候由动态连接器映射入可执行程序的地址空间,也可以通过dl库中的dlopen来映射入可执行程序的地址空间中,它的底层实现都是通过mmap来实现,这个没有什么好说的。通常来说,我们自己使用的so文件是很少主动确定so文件加载入内存的地址,所以so文件运行 阅读全文
posted @ 2019-03-06 21:50 tsecer 阅读(1174) 评论(0) 推荐(0) 编辑
摘要: 一、so文件和exe文件这两种文件其实具有很多相似自出,或者说so文件是介于obj文件和exe文件的一种中间过渡形式,它虽然不能直接运行(但是经过特殊编写的so文件内核是支持加载运行的,例如ld.so),但是具有了自己的一些更为高级的内容,例如一些初始化节,got表等内容,虽然孱弱,但是它具有了更加 阅读全文
posted @ 2019-03-06 21:49 tsecer 阅读(1539) 评论(0) 推荐(0) 编辑
摘要: 一、动态链接在Linux(unix族谱)下,共享目标文件称为so文件,它和windows下的DLL机制对应,该功能在节省物理内存使用量上有重要意义,但是更重要的它还是一种扩展框架,也就是很多所谓的“插件”的实现基础。从它的出现频率上来看,它和Linux下的多线程具有同等重要的地位,甚至更高。因为很多 阅读全文
posted @ 2019-03-06 21:48 tsecer 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 一、信号发送方式:片发VS点发通常信号发送都是使用kill系统调用来实现,这个功能其实相对粗糙一些,它的第一个参数指明了接受者,但是这个接受者在多线程中并不总是最终的处理者。那么通过这个现象可以解释这个参数的意义:那就是首选(prefer)这个线程,但是如果这个线程实在是有些难言之隐,那么它所在的线 阅读全文
posted @ 2019-03-06 21:47 tsecer 阅读(805) 评论(0) 推荐(0) 编辑
摘要: 一、被调试任务所有so文件如何枚举在前一篇博客中,大致说明了gdb是通过一个动态库提供的回调函数(_dl_debug_state)处埋伏断点,然后通过约定好的_r_debug全局变量来得到exe程序对应的link_map,然后以该结构为队列头来遍历被调试任务中所有的so文件。当时也说了这个地方比较模 阅读全文
posted @ 2019-03-06 21:46 tsecer 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 一、测不准原则我大学物理学的不太好,特别是高等物理,这个概念是在很多科普性的读物中都可以见到,就像”罗素悖论“、哥德尔的”不完备理论“、爱因斯坦的”相对论“等,大家都是一知半解,然后根据这个概念大家自由发挥,所以就有千奇百怪的场景和理解了,最后以讹传讹,倒也不清楚这个东西原始真正意义,这种现象在很多 阅读全文
posted @ 2019-03-06 21:46 tsecer 阅读(372) 评论(0) 推荐(0) 编辑
摘要: 一、gdb对共享库符号的支持当使用gdb调试一些动态链接生成的可执行文件时,我们可能会有意或者无意的在一些不存在的函数上打断点,此时gdb并不是提示错误,而是提示是否在之后加载的动态库中添加该断点,也就是pending断点,下面是一个典型的提示:(gdb) b noexistingFunction 阅读全文
posted @ 2019-03-06 21:45 tsecer 阅读(2089) 评论(0) 推荐(0) 编辑
摘要: 一、和子进程同步在linux系统中,父进程通常需要通过waitpid来等待/获取子进程状态变化情况,而这个主要就是通过waitXXX函数族来实现的,例如常见的init函数实现的respawn类配置进程(例如getty)、调试器中对子进程状态的获取,shell对同步子进程状态的监控和获取,以及通常我们 阅读全文
posted @ 2019-03-06 21:44 tsecer 阅读(635) 评论(0) 推荐(0) 编辑
摘要: 一、shell中'>'何时清空文件由于bash虽然功能没有C语言那么强大,但是它同样是有自己特殊语法,它的整个语法文件的解析也是通过一个yacc文件来定义,其中对于我们关心的'>'重定向实现来说,其语法文件的定义为:bash-4.1\parse.yredirection: '>' WORD { so 阅读全文
posted @ 2019-03-06 21:43 tsecer 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 一、管道管道是Linux中的一个重要概念,大家经常会使用管道来进行一些操作,比如最为常见的是一些命令输出的分屏显示使用 more来管道。但是在平常交互式操作的时候,很少人会关心一个管道命令是否执行成功,因为成功错误一眼就看到了,如果程序出错,通常的程序都会非常友好的提示错在哪里了。但是对于一些脚本中 阅读全文
posted @ 2019-03-06 21:42 tsecer 阅读(754) 评论(0) 推荐(0) 编辑
摘要: 一、套接口超越进程生命期一般来说,当一个进程退出的时候(不论是主动还是被动),它都会关闭自己的文件描述符,但是对于TCP的套接字来说,它的情况比较特殊,具体怎么特殊呢?我们可以想象一下,TCP是一个有连接的链路,当进程关闭的时候,关闭一端应该告诉对方,也就是发送一个FIN消息到对方,从而让对方有所准 阅读全文
posted @ 2019-03-06 21:41 tsecer 阅读(570) 评论(0) 推荐(0) 编辑
摘要: 一、robust互斥锁这种类型的锁可能不是POSIX标准中规定的锁,但是也有可能是,这个不太确定,暂时不管。这种类型的锁主要是解决当一个持有互斥锁的线程退出之后这个锁成为不可用状态的一个问题来的。可以想象,一个线程可能持有很多的锁,也可能没有,如果此时有一个外部(被其它任务kill)或者内部(出现访 阅读全文
posted @ 2019-03-06 21:41 tsecer 阅读(2082) 评论(0) 推荐(0) 编辑
摘要: 一、后台任务关于后台任务,我就不在这里拷贝一条一条的定义了。所谓的后台任务引起我的注意,是突然想起了telnetd的一个很拉轰的特征,那就是我们在终端里执行telnetd程序,它不像其它的任务(包括几乎我们可以见到的所有程序,例如cat、login等)只要获得了执行,它就毫不客气的抓住整个终端的输入 阅读全文
posted @ 2019-03-06 21:40 tsecer 阅读(419) 评论(0) 推荐(0) 编辑
摘要: 一、mutex VS semaphore类比于bool VS int在sysv的早期进程间通讯机制中,是没有mutex这个概念的,正如早期的C89中有int类型但是没有bool类型一样,因为mutex只是semaphore的一个特例而已。但是事情的发展往往也是惊人的相似,那就是bool变量在C99中 阅读全文
posted @ 2019-03-06 21:39 tsecer 阅读(711) 评论(0) 推荐(0) 编辑
摘要: 一、syn cookie攻击防御方法在前一篇文章中说明了syn flood的原理,可以看到,该机制会造成服务器的DOS瘫痪而无法提供正常服务,所以在当前的Linux中提供了一种相对比较智能的方法方法,就是使用syn_cookie机制。它的实现原理就是把连接的状态信息体现在自己提议的初始化序列号上,这 阅读全文
posted @ 2019-03-06 21:38 tsecer 阅读(315) 评论(0) 推荐(0) 编辑
摘要: 一、TCP拆链发起方经历time_wait状态以前只是注意TCP连接建立时经历的经典的“三次握手”,而对于连接的关闭关注较少,最近看了一下关闭的流程,比建立更为复杂。这个其实也不值得大惊小怪,因为free往往要比malloc复杂,因为free可能要处理释放块的合并。其中比较特殊的有一个time_wa 阅读全文
posted @ 2019-03-06 21:38 tsecer 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 一、listen调用之backlog参数这个系统调用中的第一个参数就是侦听的"父套接口",就好像进程fork时候的"父进程"一样,这个参数是必须的,我想大家应该都没有什么意见。但是后面还有一个容易被人们忽略的参数就是backlog,这个单词不是很常见,所以我第一看到它的时候是不明白它的意义和作用的, 阅读全文
posted @ 2019-03-06 21:37 tsecer 阅读(451) 评论(0) 推荐(0) 编辑

导航