发布时间:2013-06-10 17:18:08
出现异常的可能原因是exec file的symbol不存在或不匹配。根据之前对x86栈帧布局图的分析,bp-ra(即栈帧基址-返回地址)必定在栈帧顶端的固定位置,可以利用这个分布特点进行栈回溯。从当前的bp0开始,找到上一个bp1=*bp0,ra1=*(bp这0 + 4),ra1就是调用函数的地址。继续回溯,bp2=*bp1,ra2=*(bp1 + 4),ra2应该是再上一级调用函数的地址。如此循环,同时用info symbol $ra* 打印出来每一级函数,就找到实际的call trace信息了。
......【阅读全文】
发布时间:2013-06-10 17:18:03
一个函数通常会定义一些局部变量,我们知道这些局部变量是在当前函数的栈帧上来分配,那么栈上变量的分配顺序,是不是跟局部变量的定义顺序一样呢?一次偶然的coredump,证明了至少在x86中未必如此。......【阅读全文】
发布时间:2013-06-10 17:17:18
通过一个简单实用的程序实例和调试过程,打印出变量和代码在内存中的分配位置,分析x86架构CPU下程序运行时汇编级指令的表现,并推导出各级调用函数的栈帧内存布局。......【阅读全文】
发布时间:2013-06-10 17:15:15
传统的数据传输方式 很长一段时间内,数据拷贝的认识仅仅停留在应用程序层,实际上隐藏在背后的数据拷贝行为比想象的要多的多。在传输数据的时候,用户应用程序需要分配一块合适大小的缓冲区来存放需要传输的数据。用户从应用程序中读取数据,然后发送出去,只需要两个系统调用read,write即可完成.........【阅读全文】