od
Traditional format specifications may be intermixed; they accumulate:
-A, –address-radix=RADIX 地址显示方式(进制)
output format for file offsets. RADIX is one of [doxn], for Decimal, Octal, Hex or None
o –8
d –10
x –16
n –不显示
加上-v, --output-duplicates do not use * to mark line suppression
e.g.
od -A o hello
-t, –format=TYPE
select output format or formats
-a same as -t a, select named characters, ignoring high-order bit
-b same as -t o1, select octal bytes
-c same as -t c, select ASCII characters or backslash escapes
-d same as -t u2, select unsigned decimal 2-byte units
-f same as -t fF, select floats
-i same as -t dI, select decimal ints
-l same as -t dL, select decimal longs
-o same as -t o2, select octal 2-byte units
-s same as -t d2, select decimal 2-byte units
-x same as -t x2, select hexadecimal 2-byte units
-w 10 显示10列, 默认占满屏幕
e.g.
$ od -Ao -tc -w16 hello
0000000 h e l l o w o r l d ! \n \t e n
0000020 d . \n
0000023
size
size a.out
text data bss dec hex filename
1225 288 12 1525 5f5 a.out
内存程序映像,进程地址空间中各个段的作用如下:
1、文本段(text):包含程序的指令,它在程序的执行过程中一般不会改变。一般是在进程之间共享的. 比如一个进程fork出一个子进程时, 父子进程共享text段, 子进程获得父进程数据段, 堆, 栈的拷贝.const修饰的全局变量、字符串常量保存在文本段中。但const修饰的局部变量保存在堆栈段中。
2、数据段(data):用来存放程序中已初始化的全局变量以及他们的值的一块内存区域。数据段属于静态内存分配。其内容由程序初始化。
3、BSS段(Block Started by Symbol):包含未经初始化的全局变量(具体体现为一个占位符)和静态变量,BSS segment属于静态内存分配。由操作系统初始化,故不占用可执行文件空间,只是记录数据所需空间的大小。
4、堆栈段(heap,stack):heap动态内存分配(malloc,free用到这里)。stack包含了函数内部声明的局部变量。