本博文的主要内容是:1)readelf工具查看ELF文件的信息;2)hexdump工具查看这块内存;3)objdump工具对文件进行反汇编。
前一段时间对Linux不熟,所以很多命令不知道。学习C时候需要偶尔看一下汇编用来理解。我喜欢用问题的形式来学习和总结。
1. 如何看一个程序代码变量的存储布局?
这个问题在查看C代码中的一些关键字的作用很有效。如:const、static、extern等。readelf这个工具就派上用场了。
(1)readelf工具
a. 作用:用来显示ELF文件的信息。
b. 使用:readelf <option> <file>,其中我们常用选项有-a,<file>可以是目标文件或可执行文件。
(想了解该工具详细的信息,请通过Linux下的man命令查一下。)
下面通过例子来使用一下这个工具:
前一段时间对Linux不熟,所以很多命令不知道。学习C时候需要偶尔看一下汇编用来理解。我喜欢用问题的形式来学习和总结。
1. 如何看一个程序代码变量的存储布局?
这个问题在查看C代码中的一些关键字的作用很有效。如:const、static、extern等。readelf这个工具就派上用场了。
(1)readelf工具
a. 作用:用来显示ELF文件的信息。
b. 使用:readelf <option> <file>,其中我们常用选项有-a,<file>可以是目标文件或可执行文件。
(想了解该工具详细的信息,请通过Linux下的man命令查一下。)
下面通过例子来使用一下这个工具:
int main(void)
{
printf("hello, welcome!\n");
return 0;
}
用gcc编译后,通过readelf工具查看可执行文件。
gcc -g hello.c -o hello
readelf -a hello
我们会看到:
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x8048330
Start of program headers: 52 (bytes into file)
Start of section headers: 5052 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 8
Size of section headers: 40 (bytes)
Number of section headers: 38
Section header string table index: 35
ELF Header描述了操作系统为UNIX,PC机体系结构是Intel 80386。Section Header Table中有38个Section Header ,
从文件地址5052开始,每个Section Header 占40字节,共320 字节,到文件地址0x207 结束。文件地址是这样定义的:
文件开头第一个字节的地址是0x8048330。
从文件地址5052开始,每个Section Header 占40字节,共320 字节,到文件地址0x207 结束。文件地址是这样定义的:
文件开头第一个字节的地址是0x8048330。