GDB踪函数的完整调用过程 及原理
http://www.lenky.info/archives/2013/02/2202
Breakpoint , 0x0000003c4e417410 in open64 () from /lib64/ld-linux-x86-.so.
(gdb) bt
# 0x0000003c4e417410 in open64 () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e40f789 in _dl_sysdep_read_whole_file () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e408d78 in _dl_load_cache_lookup () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e408612 in _dl_map_object () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e40c3a2 in openaux () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e40e286 in _dl_catch_error () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e40ca85 in _dl_map_object_deps () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e403310 in dl_main () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e4160ae in _dl_sysdep_start () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e4014a4 in _dl_start () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e400b08 in _start () from /lib64/ld-linux-x86-.so.
# 0x0000000000000001 in ?? ()
# 0x00007fffffffe85b in ?? ()
# 0x0000000000000000 in ?? ()
(gdb) bt
# 0x0000003c4e417410 in open64 () from /lib64/ld-linux-x86-.so.
(More stack frames follow...)
(gdb) bt
# 0x0000003c4e417410 in open64 () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e40f789 in _dl_sysdep_read_whole_file () from /lib64/ld-linux-x86-.so.
(More stack frames follow...)
(gdb) bt
# 0x0000003c4e417410 in open64 () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e40f789 in _dl_sysdep_read_whole_file () from /lib64/ld-linux-x86-.so.
# 0x0000003c4e408d78 in _dl_load_cache_lookup () from /lib64/ld-linux-x86-.so.
(More stack frames follow...)
(gdb) bt -
# 0x0000000000000000 in ?? ()
(gdb) bt -
[root@monitor ~]# cat test.c #include <stdio.h>
#include <stdlib.h>
main()
{
int *p1=malloc();
int *p2=malloc();
int *p3=malloc();
int *p4=malloc();
int *p5=malloc();
printf("%p\n",p1);
printf("%p\n",p2);
printf("%p\n",p3);
printf("%p\n",p4);
printf("%p\n",p5);
printf("1231238888::"); }
[root@monitor ~]# readelf -s ./test Symbol table '.dynsym' contains entries:
Num: Value Size Type Bind Vis Ndx Name
: NOTYPE LOCAL DEFAULT UND
: FUNC GLOBAL DEFAULT UND printf@GLIBC_2.2.5 ()
: NOTYPE WEAK DEFAULT UND __gmon_start__
: FUNC GLOBAL DEFAULT UND malloc@GLIBC_2.2.5 ()
: FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.2.5 () Symbol table '.symtab' contains entries:
Num: Value Size Type Bind Vis Ndx Name
: NOTYPE LOCAL DEFAULT UND
: SECTION LOCAL DEFAULT
: 000000000040021c SECTION LOCAL DEFAULT
: 000000000040023c SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: 00000000004002f8 SECTION LOCAL DEFAULT
: 000000000040033e SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: 00000000004003c8 SECTION LOCAL DEFAULT
: 00000000004003e0 SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: 00000000004006c8 SECTION LOCAL DEFAULT
: 00000000004006d8 SECTION LOCAL DEFAULT
: 00000000004006fc SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: 00000000006007a0 SECTION LOCAL DEFAULT
: 00000000006007b0 SECTION LOCAL DEFAULT
: 00000000006007c0 SECTION LOCAL DEFAULT
: 00000000006007c8 SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: SECTION LOCAL DEFAULT
: 000000000040044c FUNC LOCAL DEFAULT call_gmon_start
: FILE LOCAL DEFAULT ABS crtstuff.c
: 00000000006007a0 OBJECT LOCAL DEFAULT __CTOR_LIST__
: 00000000006007b0 OBJECT LOCAL DEFAULT __DTOR_LIST__
: 00000000006007c0 OBJECT LOCAL DEFAULT __JCR_LIST__
: FUNC LOCAL DEFAULT __do_global_dtors_aux
: OBJECT LOCAL DEFAULT completed.
: 00000000006009a0 OBJECT LOCAL DEFAULT dtor_idx.
: 00000000004004e0 FUNC LOCAL DEFAULT frame_dummy
: FILE LOCAL DEFAULT ABS crtstuff.c
: 00000000006007a8 OBJECT LOCAL DEFAULT __CTOR_END__
: OBJECT LOCAL DEFAULT __FRAME_END__
: 00000000006007c0 OBJECT LOCAL DEFAULT __JCR_END__
: FUNC LOCAL DEFAULT __do_global_ctors_aux
: FILE LOCAL DEFAULT ABS test.c
: OBJECT LOCAL DEFAULT _GLOBAL_OFFSET_TABLE_
: 000000000060079c NOTYPE LOCAL DEFAULT __init_array_end
: 000000000060079c NOTYPE LOCAL DEFAULT __init_array_start
: 00000000006007c8 OBJECT LOCAL DEFAULT _DYNAMIC
: NOTYPE WEAK DEFAULT data_start
: FUNC GLOBAL DEFAULT UND printf@@GLIBC_2.2.5
: 00000000004005f0 FUNC GLOBAL DEFAULT __libc_csu_fini
: FUNC GLOBAL DEFAULT _start
: NOTYPE WEAK DEFAULT UND __gmon_start__
: NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses
: 00000000004006c8 FUNC GLOBAL DEFAULT _fini
: FUNC GLOBAL DEFAULT UND malloc@@GLIBC_2.2.5
: FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_
: 00000000004006d8 OBJECT GLOBAL DEFAULT _IO_stdin_used
: NOTYPE GLOBAL DEFAULT __data_start
: 00000000004006e0 OBJECT GLOBAL HIDDEN __dso_handle
: 00000000006007b8 OBJECT GLOBAL HIDDEN __DTOR_END__
: FUNC GLOBAL DEFAULT __libc_csu_init
: NOTYPE GLOBAL DEFAULT ABS __bss_start
: 00000000006009a8 NOTYPE GLOBAL DEFAULT ABS _end
: NOTYPE GLOBAL DEFAULT ABS _edata
: FUNC GLOBAL DEFAULT main
: 00000000004003c8 FUNC GLOBAL DEFAULT _init
[root@localhost trace]# readelf -s ./test | gawk '
{
if
($4 ==
"FUNC"
&& $2 != 0) {
print
"# code for "
$NF;
print
"b *0x"
$2;
print
"commands"
;
print
"silent"
;
print
"bt 1"
;
print
"c"
;
print
"end"
;
print
""
;
}
}' > sym;
[root@monitor ~]# cat sym
# code for call_gmon_start
b *0x000000000040044c
commands
silent
bt
c
end # code for __do_global_dtors_aux
b *0x0000000000400470
commands
silent
bt
c
end # code for frame_dummy
b *0x00000000004004e0
commands
silent
bt
c
end # code for __do_global_ctors_aux
b *0x0000000000400690
commands
silent
bt
c
end # code for __libc_csu_fini
b *0x00000000004005f0
commands
silent
bt
c
end # code for _start
b *0x0000000000400420
commands
silent
bt
c
end # code for _fini
b *0x00000000004006c8
commands
silent
bt
c
end # code for __libc_csu_init
b *0x0000000000400600
commands
silent
bt
c
end # code for main
b *0x0000000000400504
commands
silent
bt
c
end # code for _init
b *0x00000000004003c8
commands
silent
bt
c
end [root@monitor ~]# gdb --command=sym ./test -q
Reading symbols from /root/test...done.
Breakpoint at 0x40044c
Breakpoint at 0x400470
Breakpoint at 0x4004e0
Breakpoint at 0x400690
Breakpoint at 0x4005f0
Breakpoint at 0x400420
Breakpoint at 0x4006c8
Breakpoint at 0x400600
Breakpoint at 0x400504: file test.c, line .
Breakpoint at 0x4003c8
(gdb) r
Starting program: /root/test
# 0x0000000000400420 in _start ()
# 0x0000000000400600 in __libc_csu_init ()
# 0x00000000004003c8 in _init ()
# 0x000000000040044c in call_gmon_start ()
# 0x00000000004004e0 in frame_dummy ()
# 0x0000000000400690 in __do_global_ctors_aux ()
# main () at test.c:
0x601010
0x601030
0x601050
0x601070
0x601090
# 0x00000000004006c8 in _fini ()
# 0x0000000000400470 in __do_global_dtors_aux ()
::
Program exited with code .
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.166.el6_7..x86_64
GDB踪函数的完整调用过程 及原理的更多相关文章
- Presto 标量函数注册和调用过程简述
在Presto 函数开发一文中已经介绍过如何进行函数开发,本文主要讲述标量函数(Scalar Function)实现之后,是如何在Presto内部进行注册和被调用的.主要讲述标量函数是因为:三类函数的 ...
- AsyncTask中各个函数详细的调用过程,初步实现异步任务
AsyncTask内部类可能会产生内存泄露的问题 解决上述内部类可能引起的内存泄露问题的方法 将AsyncTask或者Thread的子类作为单独的类文件,不持有Activity的强引用 将Async ...
- [Android Pro] 深入理解函数的调用过程——栈帧
cp :http://blog.csdn.net/x_perseverance/article/details/78897637 每一个函数被调用时,都会为函数开辟一块空间,这块空间就称为栈帧. 首先 ...
- 最原始的COM组件调用过程(不使用注册表信息)
最原始的COM组件调用过程(不使用注册表信息) 最近因为项目的关系开始研究COM组件了,以前都认为COM过时了,所以也没怎么接触. 现在好好补补课了. 一般调用COM都是通过注册表找到它的位置, 然后 ...
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...
- 代码 or 指令,浅析ARM架构下的函数的调用过程
摘要:linux程序运行的状态以及如何推导调用栈. 1.背景知识 1.ARM64寄存器介绍: 2.STP指令详解(ARMV8手册): 我们先看一下指令格式(64bit),以及指令对于寄存机执行结果的影 ...
- 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程
使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程 http://blog.csdn.net/liujiayu2/article/details/5 ...
- 在C语言中函数及其调用过程
目录 函数 C语言中的变参函数 函数的本质是什么 内存区域的区分技巧 函数的调用过程 栈帧的概念 调用过程细节 按照约定传参 函数 如果一个函数有声明没实现,那么就会出现链接错误: 以上代码会出现链接 ...
- Arcgis GDB文件地理数据库、shapefile、coverage 和其他基于文件的数据源所支持的函数的完整列表
函数 以下是文件地理数据库.shapefile.coverage 和其他基于文件的数据源所支持的函数的完整列表.个人地理数据库和 ArcSDE 地理数据库也支持这些函数,但这些数据源可能使用不同的语法 ...
随机推荐
- android ListView 多次调用 getView方法
<ListView android:layout_width="match_parent" android:layout_heig ...
- word的不同章节之间添加不同的页眉
1.点击空百处 2. 在页面布局中,找到分隔符,选择”连续“选项,即在空白处插入分隔符 特别注意:这里分隔符会出现换行现象,请选择空白处,不要影响原先布局 3. 当编辑下一个页眉时,点击“链接到前一条 ...
- MVC架构学习
作为一名小小的GreenBird,学习MVC呢,已经花费了2天了,期间得到了美丽的学姐的帮助,初步整理了一下. 首先,学习MVC呢就先以一个标准的MVC的简单的例子来入手,然后根据学姐的PPT,我用v ...
- Android模拟器常用命令收录
一.Linux命令 1.挂载/systme分区为读写状态 mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system 2.切换为Root用户 ...
- php使用domdocument读取xml文件
使用domdocument读取xml文件需要用到以下几个方法和属性: 方法: 1:读取xml文件:load() 2:获取标签的对象数组:getElementByTagName() 3:对象数组的索引: ...
- 谈谈在keil下的代码定位
关于C语言,我们一般都知道对于RAM定位可以用关键字 _at_,但对于程序代码定位往往感到很迷惑, 其实keil中的程序代码定位功能极为强大 Menu: Options for Target 'Tar ...
- 浅谈Redis及其安装配置
一.Redis的介绍 二.Redis的安装配置 三.Redis的配置文件说明 四.Redis的简单操作 简介: Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型. ...
- 【转】Android ProgressDialog的使用2
原文网址:http://www.cnblogs.com/hnrainll/archive/2012/03/28/2420908.html <?xml version="1.0" ...
- HDOJ/HDU 1297 Children’s Queue(推导~大数)
Problem Description There are many students in PHT School. One day, the headmaster whose name is Pig ...
- vijosP1067Warcraft III 守望者的烦恼
vijosP1067Warcraft III 守望者的烦恼 链接:https://vijos.org/p/1067 [思路] 矩阵乘法. 可以得出递推式: f[i]=sum{ f[n-1], ...