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 地理数据库也支持这些函数,但这些数据源可能使用不同的语法 ...
随机推荐
- python第一次上机遇到的困难
正确 10 58 27412 2-1019 长度转换程序(10分) 完善下面的程序,能够: (1) 将用户输入的公制长度单位(米.千米)转换成英制长度单位(英寸.英里): (2) 将用户输入的英制 ...
- 关于CMD命令行两三事
1.返回盘符:
- Java 高效检查一个数组中是否包含某个值
如何检查一个数组(未排序)中是否包含某个特定的值?在Java中,这是一个非常有用并又很常用的操作.同时,在StackOverflow中,有时一个得票非常高的问题.在得票比较高的几个回答中,时间复杂度差 ...
- ZeroBraneStudio之支持远程调试
打开ZBS后,如果需要远程调试得先开启调试服务器:Project->Start Debugger Server 打开之后就可以编辑文件进行测试了.示例代码如下: local ZBS = 'D:/ ...
- http server v0.1_mime.c
#include <string.h> #include "mime.h" static STR_MIME_MAP mime_map[]= { MIME_MAP(MIM ...
- 30+最佳Ajax jQuery的自动完成插件的例子
在这篇文章中,我们将介绍35个jQuery AJAX的自动完成提示例子. jQuery 的自动完成功能,使用户快速找到并选择一定的价值.每个人都想要快速和即时搜索输入栏位,因为这个原因,许 流行的搜索 ...
- websphere性能设置和日常维护
一. 确认磁盘空间是否满足要求1. WebSphere 应用服务器自身代码的占用空间.这个空间一般在1G左右,在不同的系统平台上略有差异. 2. 概要文件所占的空间.WebSphere应用服务器V6. ...
- R语言 系统聚类分析1
#聚类分析是一类将数据所研究对象进行分类的统计方法,这一类方法的共同特点是:#事先不知道类别的个数与结构 据以进行分类的数据是对象之间的相似性 或差异性数据#将这些相似(相异)性数据看成是对象之间的距 ...
- HDU-2522 A simple problem
http://acm.hdu.edu.cn/showproblem.php?pid=2522 学习://除数的运算的应用和算法.除法的本质,如果余数出现重复就表示有循环节 A simple probl ...
- 把测试app打包成ipa文件
我终于把我的程序放到我的touch上了,其实把app放到touch上还有很多办法,这篇教程是主要讲怎么把app注册了,然后打包成一个ipa文件的. 先上官方文档:https://developer.a ...