Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2030342
  • 博文数量: 413
  • 博客积分: 10926
  • 博客等级: 上将
  • 技术积分: 3862
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-09 18:14
文章分类

全部博文(413)

文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(6)

2011年(138)

2010年(85)

2009年(42)

2008年(46)

2007年(26)

2006年(59)

分类: LINUX

2007-07-09 21:11:02

一、Linux Binutils
1, 概要:
    Linux binutils 是一系列软件开发工具(Tools)的集合,包括连接器(Linker),汇编器(Assembler),以及其他处理对象文件(Object files)及档案文件(Archives files)的工具。可以从下载工具包。安装Binutils后,就可以使用如下工具:addr2line, ar, as, c++filt, gprof, ld, nm, valgrind, objcopy, objdump, ranlib, readelf, size, strings and strip。

2, 简介:
2.1 addr2line
    将程序地址转换为相应的文件名,源程序行号,甚至所在的函数名。编译时加-g才能正常显示文件名及行号,否则文件名显示为??,行号显示为0(但函数名可以正常显示);若连接时加-s, 或用strip去掉可执行文件的符号表,则调用addr2line无法显示正确信息。

2.2 as
    汇编器

2.3 c++filt
    用C++和Java实现的程序,在编译之后,会重新命名原函数名,方法是在原函数名前后加字母,数字,下划线,美元符或小数点;这个过程称为混淆(Mangling)。而c++filt的功能是Mangling的反向过程,它在当前文件夹下查询包含该符号的可执行文件,然后将混淆后的函数名还原成程序中的原始函数名,称为Demangling。
eg:
    //test.c
    #include
    using namespace std;

    void Print(char *name)
    {
       cout << name << ends;
    }

    void Print(int data)
    {
       cout << data << endl;
    }

    int main(int argc, char **argv)
    {
       Print("John");
       Print(100);

       return 100;
    }

    编译连接之后, 用nasm -D test查出两个函数Print在mangling之后的民称分别为:
    _Z5PrintPc和_Z5Printi, 执行
    c++filt _Z5PrintPc
    将会显示
    Print(char *)
    c++filt纯粹只对字符串操作,跟字串所在的二进制文件没有关系。
2.4 ar
创建,修改档案文件(Archive),或解包档案文件。静态库通常以archive的形式存在。常用参数
ar cr 打包,如果不存在,则创建,如果member存在,则替换成新的
ar d  从中删除指定的member
ar x  解包
ar t   列出archive 中 所有的 members
nm 查看中导出的函数接口。
http://control.cublog.cn/

二、Other Userful Tools
1 Strace:
   Trace system call and signals

2 readelf
   Display information abut ELF files

3 ldd
   Print shell library dependences


  1. Compile & Link Tools
  2. Auxiliary Tools
    • valgrind
      (home page: )
      Valgrind is an instrumentation framework for building dynamic analysis tools. There are Valgrind tools that can automatically detect many memory management (memory leaks, stack corruption, array bounds overflows) and threading bugs, and profile your programs in detail (find out information about how your program is spending its time, so that you can find bottlenecks in your programs).
    • xxx
  3. gdb 调试工具
    • 输出unicode 字符
      (gdb) x /6ch your_unicode_string_ptr
      0x8048834 <_ZTV4Intf+20>:       97 'a'  0 '/0'  98 'b'  0 '/0'  99 'c'  0 '/0'
      其中6表示要显示的长度。
      这种方式只能显示英文的unicode,中文仍然显示不了,不过总比没有强多了。
    • xx
  4. pstack: pstack命令查看里边的各个线程id以及对应的线程现在正在做什么事情,分析多组数据就可以获得哪些线程里有慢操作影响了服务器的性能,从而得到解决方案
  5. xxx
阅读(1902) | 评论(0) | 转发(0) |
0

上一篇:NASM开发点滴

下一篇:[Windows] Administrator

给主人留下些什么吧!~~