首页 > *nix技术, Shell命令, 跟踪调试 > Linux下逆向工具

Linux下逆向工具

2012年1月12日 发表评论 阅读评论 12,860 次浏览

Windows下有很多逆向工具,Linux下也有,当然,和Windows平台有所不同的是,Linux下的逆向工具主要是用来定位和分析程序的问题,比如当应用程序崩溃之后,如何从core文件里给出的信息查出原因所在。
曾经用过的一些命令如下(只列出主要功能):
addr2line:根据一个代码地址,定位到对应的源文件与代码行。
nm:列出程序里的符号。
objdump:反汇编。
readelf:显示任何ELF格式目标文件里的相关符号信息。
等等。

[root@localhost db]# addr2line -e xfs_db -f 44c794
xfs_attr_leaf_add
/root/xfs.code/xfsprogs/libxfs/xfs_attr_leaf.c:785
[root@localhost db]# nm ./xfs_db 
000000000047caa0 r C.135.10410
000000000046c608 t INIT_HLIST_NODE
0000000000692da4 b Rflag
0000000000692028 d _DYNAMIC
00000000006921f0 d _GLOBAL_OFFSET_TABLE_
000000000046e0c0 R _IO_stdin_used
                 w _Jv_RegisterClasses
0000000000692008 d __CTOR_END__
0000000000692000 d __CTOR_LIST__
0000000000692018 D __DTOR_END__
0000000000692010 d __DTOR_LIST__
0000000000491660 r __FRAME_END__
00000000004806e0 r __FUNCTION__.10009
...
[root@localhost db]# objdump --source xfs_db 

xfs_db:     file format elf64-x86-64

Disassembly of section .init:

0000000000401e68 <_init>:
  401e68:	48 83 ec 08          	sub    $0x8,%rsp
  401e6c:	e8 1b 07 00 00       	callq  40258c <call_gmon_start>
  401e71:	e8 9a 07 00 00       	callq  402610 <frame_dummy>
  401e76:	e8 e5 c1 06 00       	callq  46e060 <__do_global_ctors_aux>
  401e7b:	48 83 c4 08          	add    $0x8,%rsp
  401e7f:	c3                   	retq   
Disassembly of section .plt:

0000000000401e80 <ctime@plt-0x10>:
  401e80:	ff 35 72 03 29 00    	pushq  2687858(%rip)        # 6921f8 <_GLOBAL_OFFSET_TABLE_+0x8>
  401e86:	ff 25 74 03 29 00    	jmpq   *2687860(%rip)        # 692200 <_GLOBAL_OFFSET_TABLE_+0x10>
  401e8c:	0f 1f 40 00          	nopl   0x0(%rax)
...
[root@localhost db]# readelf -S xfs_db 
There are 37 section headers, starting at offset 0x1a8fb8:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
  [ 0]                   NULL             0000000000000000  00000000
       0000000000000000  0000000000000000           0     0     0
  [ 1] .interp           PROGBITS         0000000000400200  00000200
       000000000000001c  0000000000000000   A       0     0     1
...
  [34] .shstrtab         STRTAB           0000000000000000  001a8e65
       0000000000000153  0000000000000000           0     0     1
  [35] .symtab           SYMTAB           0000000000000000  001a98f8
       000000000000d5d8  0000000000000018          36   1513     8
  [36] .strtab           STRTAB           0000000000000000  001b6ed0
       0000000000008402  0000000000000000           0     0     1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings)
  I (info), L (link order), G (group), x (unknown)
  O (extra OS processing required) o (OS specific), p (processor specific)
[root@localhost db]# 

更多相关命令请参考这里:
http://sourceware.org/binutils/
http://sourceforge.net/projects/elftoolchain/
http://sourceforge.net/apps/trac/elftoolchain/

转载请保留地址:http://www.lenky.info/archives/2012/01/906http://lenky.info/?p=906


备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。

法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以Email或书面等方式告知,本站将及时删除相关内容或链接。

  1. 小聪明
    2013年1月4日23:17 | #1

    博主是否有兴趣将Linux环境下栈回溯主要方法总结一下呢,譬如gdb,glibc中的backtrace函数,libSegment库,或者libunwind等,让更多的人受益,呵呵。

    • lenky
      2013年1月5日08:37 | #2

      呵,有时间一定弄。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.