为了跟踪glibc库中函数的执行,需要带有debug symbol的glibc, 如果是debian或者是基于debian的发行版本如ubuntu和linuxmint之类的,很简单执行如下指令安装即可。

#apt-get install libc6-dbg

libc6-dbg其实只是包含libc6中的debug symbol.

如何判断一个可执行文件或者动态链接库含有debug symbols,可以使用readelf来验证。

#readelf -w prog_name

也许你会想直接去下载glibc然后编译安装,但编译glibc确实不是一件很简单的事情,还是借助于已有的系统好。如果当前使用的是archlinux,那么事情就会很简单了。

步骤一 安装abs

#pacman -S abs

步骤二 运行abs,下载ports tree

#abs

步骤三 将glibc拷贝到任意目录,如/tmp

#cp -a /var/abs/core/glibc /tmp

步骤四 修改glibc目录下的PKGBUILD,使options看起来如下所示

options=('debug !strip')

解释一下!strip表示不strip symbol, debug表示编译时带加上debug symbol

步骤五 开始编译

#makepkg --asroot --nocheck

--nocheck 要带上,否则编译会出错

步骤六 等待编译完成,安装新包

#pacman -U glibc-2.18-2-i686.pkg.tar.xz

步骤七 验证glibc是否含有debug symbol

方法一 关注屏幕输出是否含有"-g"选项

方法二 写一个简单的hello,world

#include <stdlib.h>
#include <stdio.h> int main(int argc, char** argv) {
printf("hello,world\n");
return ;
}
#gcc -o test -g test.c

然后使用gdb进行debug,断点设置为_start, 如果运行后在断点处显示处具体的文件名和行号,那么表明一切如预期的那样。下图显示了一个成功的例子

Reading symbols from /root/glibc/src/glibc-2.18/malloc/test...done.
(gdb) break _start
Breakpoint at 0x8048360: file ../sysdeps/i386/start.S, line .
(gdb) r
Starting program: /root/glibc/src/glibc-2.18/malloc/test
warning: Could not load shared library symbols for linux-gate.so..
Do you need "set solib-search-path" or "set sysroot"? Breakpoint , _start () at ../sysdeps/i386/start.S:
xorl %ebp, %ebp
(gdb)

每天学点GDB 11的更多相关文章

  1. 尚学linux课程---11、vim操作命令1

    尚学linux课程---11.vim操作命令1 一.总结 一句话总结: 要看不同的视频,每个视频的关键点都不一样,不如之间的的视频就没讲到vim中set nu是什么意思 1.Vi有三种基本工作模式? ...

  2. 尚学python课程---11、linux环境下安装python注意

    尚学python课程---11.linux环境下安装python注意 一.总结 一句话总结: 准备安装依赖包:zlib.openssl:yum install zlib* openssl*:pytho ...

  3. 小白学 Python(11):基础数据结构(元组)

    人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...

  4. 每天学点GDB 15

    本节重点描述两个gdb集成测试环境 有没有办法在一边调试的时候,一边显示对应的源码呢?有没有一种工具能够将gdb集成到ide中呢,本文就试图回答这些问题. emacs gdb 在linux的世界里,e ...

  5. 每天学点GDB 13

    ptrace是gdb实现的基石,本文简要介绍一下ptrace. ptrace linux提供的系统调用ptrace,使得一个进程可以attach到另一个进程并进而完整的控制被attach上的进程. 被 ...

  6. 每天学点GDB 12

    本文介绍在archlinux环境下,如何进行内核使用gdb配合qemu进行调试.   1. 安装qemu   2. 编译linux kernel 选择最新的内核版本,规避gcc编译出错的问题具体步骤如 ...

  7. Rhythmk 一步一步学 JAVA(11)Ibatis 环境配置

    1.项目文件分布. 2.example1.java: package com.rhythmk.example1; import java.io.IOException; import java.io. ...

  8. NOIP2018学军中学游记(11.09~11.11)

    前言 这篇博客记录的是我在\(NOIP2018\)提高组比赛中的经历. 这一次的\(NOIP\)是在学军中学举办的, 莫名感到一阵慌张. 但愿能有一个好成绩,不然就要\(AFO\)了... ... 说 ...

  9. 小白学Python(11)——pyecharts,绘制饼图 Pie

    Pie-基本示例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...

随机推荐

  1. struts2中各种值栈问题

    struts2中OGNL和 ValueStack(一) 收藏 学习的时候,总分不清楚在struts2中页面的传值和取值是怎么来完成的,所以从网上搜了很多资料,现在把这些资料总结写,留着以后参考..看完 ...

  2. w

    w --help -f 开启或关闭显示用户从何处登入系统. -h 不显示各栏位的标题信息列. -l 使用详细格式列表,此为预设值. -s 使用简洁格式列表,不显示用户登入时间,终端机阶段作业和程序所耗 ...

  3. android 布局中 layout_gravity、gravity、orientation、layout_weight【转】

    线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是 ...

  4. POJ 2778 DNA Sequence(AC自动机+矩阵加速)

    DNA Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9899   Accepted: 3717 Desc ...

  5. Hark的数据结构与算法练习之插入排序

    算法说明: 先是拿语言进行一下描述: 假如是做降序排序,那么从头开始扫描每个数字,使每个数字与它前面的若干数字进行比较,直接找到小于当前数字a(当前数字以a代替)的数字b(小于a的数字以b代替). 然 ...

  6. SU suamp命令学习

  7. 模拟 CSU 1562 Fun House

    题目传送门 /* 题意:光线从 '*' 发射,遇到 '/' 或 '\' 进行反射,最后射到墙上,将 'x' 变成 '&' 模拟:仔细读题,搞清楚要做什么,就是i,j的移动,直到撞到墙,模拟一下 ...

  8. POJ2817 WordStack(状压DP)

    题目给几个字符串,可以给它们添加前导空格,然后排列,计算每一个字符串和前一个字符串相同非空格字符相等的个数,求可能的最大个数. 状态DP: d[S][i][j]表示已经用的字符串集合S且排列的最后一个 ...

  9. web farm 讨论引出

    关于web farm 有成功的实施的文档没 用它还不如 用nginx,简单易用. Nginx for windows的运行效果咋样 windows  iis无敌 玩nginx就不要用win系统,必须l ...

  10. MongoDB的安装与CRUD(JAVA)

    http://blogread.cn/it/article/4348?f=wb (MongoDB) 安装: 1)下载MongoDB数据库(这里使用Windows 32 bit版) http://dow ...