一、Linux Binutils
1, 概要:
Linux binutils 是一系列软件开发工具(Tools)的集合,包括连接器(Linker),汇编器(Assembler),以及其他处理对象文件(Object files)及档案文件(Archives files)的工具。可以从 ftp://ftp.gnu.org/gnu/binutils/下载工具包。安装Binutils后,就可以使用如下工具:addr2line, ar, as, c++filt, gprof, ld, nm, 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 <iostream>
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 *)
二、Other Userful Tools
1 Strace:
Trace system call and signals
2 readelf
Display information abut ELF files
3 ldd
Print shell library dependences
1, 概要:
Linux binutils 是一系列软件开发工具(Tools)的集合,包括连接器(Linker),汇编器(Assembler),以及其他处理对象文件(Object files)及档案文件(Archives files)的工具。可以从 ftp://ftp.gnu.org/gnu/binutils/下载工具包。安装Binutils后,就可以使用如下工具:addr2line, ar, as, c++filt, gprof, ld, nm, 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 <iostream>
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 *)
二、Other Userful Tools
1 Strace:
Trace system call and signals
2 readelf
Display information abut ELF files
3 ldd
Print shell library dependences