linux c调试软件下载,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

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文件并加载分析,显示你所需要的文件信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值