06 2016 档案

摘要:一般来讲,对非法地址的访问会导致应用程序收到由系统发送的sigsegv信号,默认情况下,函数对于这个信号的处理是退出。 但是为了方便调试,我们可以自己设置处理函数,使用signal函数。 这里比较重要的一点是,按照流程,cpu取完一条指令时,pc会指向下一条指令,那么如果我们指定函数对sigsegv 阅读全文
posted @ 2016-06-30 16:00 __sipl 阅读(1494) 评论(0) 推荐(0)
摘要:.plt的作用是一个跳板,保存了某个符号在重定位表中的偏移量(用来第一次查找某个符号)和对应的.got.plt的对应的地址 .rel.dyn重定向表,在程序启动时就需要重定位完成。 .rel.plt保存了重定位表的信息,可以使用lazy的连接方式 .got据说是保存了elf文件本身的各个符号的偏移量 阅读全文
posted @ 2016-06-21 16:37 __sipl 阅读(5937) 评论(0) 推荐(1)
摘要:最近学习了elf文件的格式,重点关注了动态链接过程中的使用到的section 第一步程序在加载时,会把解释器程序加入到.interp段。可以解决动态库和可执行文件的加载。 一般来讲程序的加载方式是懒启动,Lazy;除非指定了LD_BIND_NOW环境变量非0,那么在程序启动时就会把外部符号地址全部加 阅读全文
posted @ 2016-06-21 16:19 __sipl 阅读(581) 评论(0) 推荐(0)
摘要:最近阅读了tcp/ip详解卷2,总结一下整个发送过程和接收过程 sendmsg \/ sendit \/ sosend(这一步将数据从用户空间拷贝到内核空间,并且会在这一步判断发送缓存空间是否充足,是否需要等待缓存空间,循环发送) \/ tcp_usrreq(将上一步中整理好的数据添加到发送缓冲尾部 阅读全文
posted @ 2016-06-13 15:40 __sipl 阅读(1167) 评论(0) 推荐(0)
摘要:以下内容总结自debug hacks一书的高手们的调试技术一章 1.strace的使用技巧 strace name,以这样的方式运行程序,可以查看到程序运行时的系统调用,仅仅是系统调用。可以看到系统调用失败时的传参,或者卡在哪个函数位置等等。 -i选项可以看到每个系统调用的地址,那样在使用gdb调试 阅读全文
posted @ 2016-06-01 16:42 __sipl 阅读(536) 评论(0) 推荐(0)
摘要:最近在学习linux高级调试技术。下面就动态库连接这块做了一个实验 首先理解下plt是procedure linkage table,got是global offset table。got表中存放的是外部符号的地址。plt表中存放的是函数地址。下面看下实验具体情况。 源码: #include <st 阅读全文
posted @ 2016-06-01 10:34 __sipl 阅读(1516) 评论(1) 推荐(1)