LinuxC的调试工具
来源:互联网 发布:2345看图王apk软件 编辑:程序博客网 时间:2024/06/11 05:28
LinuxC的调试工具
作者:王劲男,华清远见嵌入式学院讲师。
在linux开发中,使用gcc做为编译器,编译程序产生出来的东西可以是非常高效的ELF可执行文件。
但是我们今天来看的是非常有用的调试工具可以帮我们查看到一些文件细节。
第一个是
nm
nm 工具可以列出文件中各部分的地址信息。
08049f28 d _DYNAMIC
08049ff4 d _GLOBAL_OFFSET_TABLE_
080484ac R _IO_stdin_used
w _Jv_RegisterClasses
08049f18 d __CTOR_END__
08049f14 d __CTOR_LIST__
08049f20 D __DTOR_END__
08049f1c d __DTOR_LIST__
080484bc r __FRAME_END__
08049f24 d __JCR_END__
08049f24 d __JCR_LIST__
0804a014 A __bss_start
0804a00c D __data_start
08048460 t __do_global_ctors_aux
08048330 t __do_global_dtors_aux
0804a010 D __dso_handle
w __gmon_start__
0804845a T __i686.get_pc_thunk.bx
08049f14 d __init_array_end
08049f14 d __init_array_start
080483f0 T __libc_csu_fini
08048400 T __libc_csu_init
U __libc_start_main@@GLIBC_2.0
0804a014 A _edata
0804a01c A _end
0804848c T _fini
080484a8 R _fp_hw
08048290 T _init
08048300 T _start
080483b4 T abc
0804a014 b completed.7065
0804a00c W data_start
0804a018 b dtor_idx.7067
08048390 t frame_dummy
080483c8 T kkk
080483cd T main
U puts@@GLIBC_2.0
想要得到上述结果,需要一个程序:
#include <stdio.h>
void abc(void) {
printf("Hello,world/n");
return;
}
void kkk(void) {
return ;
}
int main(int argc,char **argv) {
((void (*)())0x80483b4)();
return 0;
}
通过使用GCC编译
gcc test.c
会生成一个a.out文件
然后直接使用
nm
就会得到屏幕上的结果了,
这个结果有什么用呢?
仔细观察 nm 命令执行的结果其中:
080483b4 T abc
的意思是abc函数的入口地址是0x080483b4
在程序中我们使用这个地址就可以直接调用函数abc,了解链接信息。
第二个程序是
addr2line
这个程序如果想要正常执行,需要在编译时加上-g选项
gcc test.c -g
这样当你输入
addr2line 0x080483b4
时系统会报出abc所在的行
/home/linux/test_c/test.c:2
这些命令都会自动的查找a.out文件并加载分析,显示你所需要的文件信息。
- LinuxC的调试工具
- linuxC开发调式工具
- LinuxC语言概述及开发工具的使用
- linuxc的安装
- Linuxc
- linuxc
- LinuxC编程工具介绍(一)--gdb和make的使用
- LinuxC(Unix/Linux系统简介/开发工具)
- LinuxC下的gcc编译器
- 对LinuxC课程的了解
- javascript的调试工具
- javascript的调试工具
- JavaScript的调试工具
- 调试工具的使用
- tp的调试工具
- Chrome的调试工具
- Chrome的调试工具
- linuxC调试代码小技巧——利用条件编译
- Object -C 语言语法速记代码。
- 使用sp_executesql将查询作为一个明确参数化的查询来执行
- Visual Studio 2005-如何添加 需要重载 的虚函数
- MultiByteToWideChar 和WideCharToMultiByte的使用
- 【IE6的疯狂系列】IE6 BUG大全
- LinuxC的调试工具
- Unity JavaScript 解析json
- 10位数程序实现输出最大值
- 调和分析
- 对oracle锁几种模式的理解
- 关于mysql中中文的显示
- Xcode中使用svn时,报证书验证错误Error validating server certificate for
- 神奇相机将照片变文字 超大相册搜图无压力
- 编程规范三