每天学点GDB 11
为了跟踪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的更多相关文章
- 尚学linux课程---11、vim操作命令1
尚学linux课程---11.vim操作命令1 一.总结 一句话总结: 要看不同的视频,每个视频的关键点都不一样,不如之间的的视频就没讲到vim中set nu是什么意思 1.Vi有三种基本工作模式? ...
- 尚学python课程---11、linux环境下安装python注意
尚学python课程---11.linux环境下安装python注意 一.总结 一句话总结: 准备安装依赖包:zlib.openssl:yum install zlib* openssl*:pytho ...
- 小白学 Python(11):基础数据结构(元组)
人生苦短,我选Python 前文传送门 小白学 Python(1):开篇 小白学 Python(2):基础数据类型(上) 小白学 Python(3):基础数据类型(下) 小白学 Python(4):变 ...
- 每天学点GDB 15
本节重点描述两个gdb集成测试环境 有没有办法在一边调试的时候,一边显示对应的源码呢?有没有一种工具能够将gdb集成到ide中呢,本文就试图回答这些问题. emacs gdb 在linux的世界里,e ...
- 每天学点GDB 13
ptrace是gdb实现的基石,本文简要介绍一下ptrace. ptrace linux提供的系统调用ptrace,使得一个进程可以attach到另一个进程并进而完整的控制被attach上的进程. 被 ...
- 每天学点GDB 12
本文介绍在archlinux环境下,如何进行内核使用gdb配合qemu进行调试. 1. 安装qemu 2. 编译linux kernel 选择最新的内核版本,规避gcc编译出错的问题具体步骤如 ...
- Rhythmk 一步一步学 JAVA(11)Ibatis 环境配置
1.项目文件分布. 2.example1.java: package com.rhythmk.example1; import java.io.IOException; import java.io. ...
- NOIP2018学军中学游记(11.09~11.11)
前言 这篇博客记录的是我在\(NOIP2018\)提高组比赛中的经历. 这一次的\(NOIP\)是在学军中学举办的, 莫名感到一阵慌张. 但愿能有一个好成绩,不然就要\(AFO\)了... ... 说 ...
- 小白学Python(11)——pyecharts,绘制饼图 Pie
Pie-基本示例 from example.commons import Faker from pyecharts import options as opts from pyecharts.char ...
随机推荐
- 删除自带OpenJDK
1:rpm -qa|grep jdk 查看当前的jdk情况. 2:yum -y remove java java-1.7.0-openjdk* 卸载openjdk,这个过程中因为依赖原因可能会卸载一些 ...
- 利用TabWidget实现底部菜单
TabWidget类似于通话记录的界面,通过切换多个标签从而显示出多个不同内容,能够展示内容丰富的页面信息,而且彼此之间不会干扰,有利于展示.下面,通过一个例子来学习用法 首先用一个类来继承TabAc ...
- php 简单操作数据库
<?php header("content-type:text/html;charset=utf-8"); /*//造一个连接 $connect = @mysql_conne ...
- Ubuntu 15.10系统安装后要做的15件事
Ubuntu 15.04发布了,带来了很多新特性,同样也依然带着很多不习惯的东西,所以装完系统后还要进行一系列的优化. 1.删除libreoffice libreoffice虽然是开源的,但是Java ...
- go编写简单的web服务器
package main import ( "fmt" "log" "net/http" "strings" ) //h ...
- h5 canvas 小球移动
h5 canvas 小球移动 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- 一个功能完备的.NET开源OpenID Connect/OAuth 2.0框架——IdentityServer3
今天推荐的是我一直以来都在关注的一个开源的OpenID Connect/OAuth 2.0服务框架--IdentityServer3.其支持完整的OpenID Connect/OAuth 2.0标准, ...
- TypeScript的崛起
今天要讨论的话题是TypeScript.之前在微博上转载过一篇<The Rise of TypeScript?>的文章,今天来谈一下我的感想. 很多朋友应该都了解,TypeScript是微 ...
- 解决treeview未选中时,默认选中首个根节点的问题!
private void treeView1_MouseUp(object sender, MouseEventArgs e) { TreeNode selectnode = this.treeVie ...
- Android横屏竖屏切换的问题
Android横屏竖屏切换的问题 http://blog.sina.com.cn/s/blog_77c632410101790w.html