当前位置: 首页 > news >正文

成都市成华区建设局官方网站网站建设氺首选金手指13

成都市成华区建设局官方网站,网站建设氺首选金手指13,网站设计自己申请,品质好的英文【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——objdump三、代码段四、 数据段和只读数据段五、 ELF文件结构描述1、头文件2、段表2.1、重定位表2.2、字符串表2.3、查看重定位表… 【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——objdump三、代码段四、 数据段和只读数据段五、 ELF文件结构描述1、头文件2、段表2.1、重定位表2.2、字符串表2.3、查看重定位表 和 字符串表 六、调试信息 一、目标文件_存储格式 目标文件就是源代码编译后但未进行链接的那些中间文件Windows的.obj和Linux下的.o 1、生成目标文件 代码 #includestdio.hint global_init_var 123; int global_uninit_var;void show( int i ) {printf( %d\n, i ); }int main() {static int static_var 456;static int static_var2;int a 1;int b;show(a);return -1; }生成目标文件的指令 gcc -c hello.c -o hello.o2、目标文件存储格式 目标文件跟可执行文件的内容与结构很相似所以一般跟可执行文件格式一起采用一种格式存储。 在Windows下我们可以统称它们为PECOFF文件格式。 在Linux下我们可以将它们统称为ELF文件。 其他不太常见的可执行文件格式还有Intel/Microsoft的OMFObject Module Format、Unix a.out格式和MS-DOS .COM格式等。 不光是可执行文件Windows的.exe和Linux下的ELF可执行文件按照可执行文件格式存储。动态链接库DLLDynamic Linking LibraryWindows的.dll和Linux的.so及静态链接库Static Linking LibraryWindows的.lib和Linux的.a文件都按照可执行文件格式存储。它们在Windows下都按照PE-COFF格式存储Linux下按照ELF格式存储。静态链接库稍有不同它是把很多目标文件捆绑在一起形成一个文件再加上一些索引你可以简单地把它理解为一个包含有很多目标文件的文件包。 3、file查看文件格式 file:查看文件格式 $file hello.o二、查看目标文件的内部结构——objdump 一般目标文件将这些信息按不同的属性以“节”Section的形式存储有时候也叫“段”Segment. 在一般情况下它们都表示一个一定长度的区域基本上不加以区别唯一的区别是在ELF的链接视图和装载视图的时候后面会专门提到。 objdump指令参数“-h”就是把ELF文件的各个段的基本信息打印出来。我们也可以使用“objdump –x”把更多的信息打印出来. $objdump -h hello.o$objdump -x hello.o如上图目标文件的格式是ELF从图中可以看到ELF文件的开头是一个“文件头”它描述了整个文件的文件属性包括文件是否可执行、是静态链接还是动态链接及入口地址如果是可执行文件、目标硬件、目标操作系统等信息文件头还包括一个段表Section Table段表其实是一个描述文件中各个段的数组。段表描述了文件中各个段在文件中的偏移位置及段的属性等从段表里面可以得到每个段的所有信息。文件头后面就是各个段的内容比如代码段保存的就是程序的指令数据段保存的就是程序的静态变量 段段名解释.code或.text代码段程序源代码编译后的机器指令经常被放在代码段Code Section里.data数据段全局变量和局部静态变量数据经常放在数据段Data Section。让我们.bss数据段未初始化的全局变量和局部静态变量一般放在一个叫.“bss”的段里。.rodata数据段只读数据段,const的全局变量#define定义的常量以及诸如“Hello World”的字符串常量.comment注释信息段没太懂.note.GNU-stack编译信息编译器的版本信息段.en_frame调试信息调试时栈回溯时用到 const修饰的全局变量在常量区const修饰的局部变量只是为了防止修改没有放入常量区代码区.text。 未初始化的全局变量和局部静态变量默认值都为0本来它们也可以被放在.data段的但是因为它们都是0所以为它们在.data段分配空间并且存放数据0是没有必要的。程序运行的时候它们的确是要占内存空间的并且可执行文件必须记录所有未初始化的全局量和局部静态变量的大小总和记为.bss段。所以.bss段只是为未初始化的全局变量和局部静态变量预留位置而已它并没有内容所以它在文件中也不占据空间。 数据段.bss、.rdata、.data 导出数据段.edata 导入数据段.idata 段是导入数据.idata .edata段包含了应用程序或DLL的导出数据。在这个段出现的时候它会包含一个到达导出信息的导出目录。 查看目标文件详细信息 $objdump -x hello.o size命令 做“size”它可以用来查看ELF文件的代码段、数据段和BSS段的长度dec表示3个段长度的和的十进制hex表示长度和的十六进制 三、代码段 objdump的 “-s”参数可以将所有段的内容以十六进制的方式打印出来 “-d ”参数可以将所有包含指令的段反汇编。 $gcc -c hello.c -o hello.o[dev1localhost test01]$ gcc -c hello.c -o hello.o [dev1localhost test01]$ objdump -s -d hello.ohello.o 文件格式 elf64-x86-64Contents of section .text:0000 554889e5 4883ec10 897dfc8b 45fc89c6 UH..H....}..E...0010 bf000000 00b80000 0000e800 000000c9 ................0020 c3554889 e54883ec 10c745fc 01000000 .UH..H....E.....0030 8b45fc89 c7e80000 0000b8ff ffffffc9 .E..............0040 c3 . Contents of section .data:0000 7b000000 c8010000 {....... Contents of section .rodata:0000 25640a00 %d.. Contents of section .comment:0000 00474343 3a202847 4e552920 342e382e .GCC: (GNU) 4.8.0010 35203230 31353036 32332028 52656420 5 20150623 (Red 0020 48617420 342e382e 352d3434 2900 Hat 4.8.5-44). Contents of section .eh_frame:0000 14000000 00000000 017a5200 01781001 .........zR..x..0010 1b0c0708 90010000 1c000000 1c000000 ................0020 00000000 21000000 00410e10 8602430d ....!....A....C.0030 065c0c07 08000000 1c000000 3c000000 .\.............0040 00000000 20000000 00410e10 8602430d .... ....A....C.0050 065b0c07 08000000 .[...... Disassembly of section .text:0000000000000000 show:0: 55 push %rbp1: 48 89 e5 mov %rsp,%rbp4: 48 83 ec 10 sub $0x10,%rsp8: 89 7d fc mov %edi,-0x4(%rbp)b: 8b 45 fc mov -0x4(%rbp),%eaxe: 89 c6 mov %eax,%esi10: bf 00 00 00 00 mov $0x0,%edi15: b8 00 00 00 00 mov $0x0,%eax1a: e8 00 00 00 00 callq 1f show0x1f1f: c9 leaveq 20: c3 retq 0000000000000021 main:21: 55 push %rbp22: 48 89 e5 mov %rsp,%rbp25: 48 83 ec 10 sub $0x10,%rsp29: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%rbp)30: 8b 45 fc mov -0x4(%rbp),%eax33: 89 c7 mov %eax,%edi35: e8 00 00 00 00 callq 3a main0x193a: b8 ff ff ff ff mov $0xffffffff,%eax3f: c9 leaveq 40: c3 retq [dev1localhost test01]$ 跟前面我们了解到的“.text”段长度相符合最左面一列是偏移量中间4列是十六进制内容最右面一列是.text段的ASCII码形式。对照下面的反汇编结果可以很明显地看到.text段里所包含的正是hello.c里两个函数 func1() 和 main() 的指令 四、 数据段和只读数据段 .data段保存的是那些已经初始化了的全局静态变量和局部静态变量。前面的SimpleSection.c代码里面一共有两个这样的变量分别是global_init_varabal 与 static_var 。这两个变量每个4个字节一共刚好8个字节所以“.data”这个段的大小为8个字节。SimpleSection.c里面我们在调用“printf”的时候用到了一个字符串常量“%d\n”它是一种只读数据所以它被放到了“.rodata”段我们可以从输出结果看到“.rodata”这个段的4个字节刚好是这个字符串常量的ASCII字节序最后以\0结尾。“.rodata”段存放的是只读数据一般是程序里面的只读变量如const修饰的变量和字符串常量。单独设立“.rodata”段有很多好处不光是在语义上支持了C的const关键字而且操作系统在加载的时候可以将“.rodata”段的属性映射成只读 有时候编译器会把字符串常量放到“.data”段而不会单独放在“.rodata”段。 objdump -x -s -d hello.o[dev1localhost test01]$ objdump -x -s -d hello.ohello.o 文件格式 elf64-x86-64 hello.o 体系结构i386:x86-64标志 0x00000011 HAS_RELOC, HAS_SYMS 起始地址 0x0000000000000000节 Idx Name Size VMA LMA File off Algn0 .text 00000041 0000000000000000 0000000000000000 00000040 2**0CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE1 .data 00000008 0000000000000000 0000000000000000 00000084 2**2CONTENTS, ALLOC, LOAD, DATA2 .bss 00000004 0000000000000000 0000000000000000 0000008c 2**2ALLOC3 .rodata 00000004 0000000000000000 0000000000000000 0000008c 2**0CONTENTS, ALLOC, LOAD, READONLY, DATA4 .comment 0000002e 0000000000000000 0000000000000000 00000090 2**0CONTENTS, READONLY5 .note.GNU-stack 00000000 0000000000000000 0000000000000000 000000be 2**0CONTENTS, READONLY6 .eh_frame 00000058 0000000000000000 0000000000000000 000000c0 2**3CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA SYMBOL TABLE: 0000000000000000 l df *ABS* 0000000000000000 hello.c 0000000000000000 l d .text 0000000000000000 .text 0000000000000000 l d .data 0000000000000000 .data 0000000000000000 l d .bss 0000000000000000 .bss 0000000000000000 l d .rodata 0000000000000000 .rodata 0000000000000000 l O .bss 0000000000000004 static_var2.2184 0000000000000004 l O .data 0000000000000004 static_var.2183 0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack 0000000000000000 l d .eh_frame 0000000000000000 .eh_frame 0000000000000000 l d .comment 0000000000000000 .comment 0000000000000000 g O .data 0000000000000004 global_init_var 0000000000000004 O *COM* 0000000000000004 global_uninit_var 0000000000000000 g F .text 0000000000000021 show 0000000000000000 *UND* 0000000000000000 printf 0000000000000021 g F .text 0000000000000020 mainContents of section .text:0000 554889e5 4883ec10 897dfc8b 45fc89c6 UH..H....}..E...0010 bf000000 00b80000 0000e800 000000c9 ................0020 c3554889 e54883ec 10c745fc 01000000 .UH..H....E.....0030 8b45fc89 c7e80000 0000b8ff ffffffc9 .E..............0040 c3 . Contents of section .data:0000 7b000000 c8010000 {....... Contents of section .rodata:0000 25640a00 %d.. Contents of section .comment:0000 00474343 3a202847 4e552920 342e382e .GCC: (GNU) 4.8.0010 35203230 31353036 32332028 52656420 5 20150623 (Red 0020 48617420 342e382e 352d3434 2900 Hat 4.8.5-44). Contents of section .eh_frame:0000 14000000 00000000 017a5200 01781001 .........zR..x..0010 1b0c0708 90010000 1c000000 1c000000 ................0020 00000000 21000000 00410e10 8602430d ....!....A....C.0030 065c0c07 08000000 1c000000 3c000000 .\.............0040 00000000 20000000 00410e10 8602430d .... ....A....C.0050 065b0c07 08000000 .[...... Disassembly of section .text:0000000000000000 show:0: 55 push %rbp1: 48 89 e5 mov %rsp,%rbp4: 48 83 ec 10 sub $0x10,%rsp8: 89 7d fc mov %edi,-0x4(%rbp)b: 8b 45 fc mov -0x4(%rbp),%eaxe: 89 c6 mov %eax,%esi10: bf 00 00 00 00 mov $0x0,%edi11: R_X86_64_32 .rodata15: b8 00 00 00 00 mov $0x0,%eax1a: e8 00 00 00 00 callq 1f show0x1f1b: R_X86_64_PC32 printf-0x41f: c9 leaveq 20: c3 retq 0000000000000021 main:21: 55 push %rbp22: 48 89 e5 mov %rsp,%rbp25: 48 83 ec 10 sub $0x10,%rsp29: c7 45 fc 01 00 00 00 movl $0x1,-0x4(%rbp)30: 8b 45 fc mov -0x4(%rbp),%eax33: 89 c7 mov %eax,%edi35: e8 00 00 00 00 callq 3a main0x1936: R_X86_64_PC32 show-0x43a: b8 ff ff ff ff mov $0xffffffff,%eax3f: c9 leaveq 40: c3 retq [dev1localhost test01]$ 下一篇文章详细的展示下全局变量、局部变量、常量、static、const分别存储在哪儿 五、 ELF文件结构描述 1、头文件 我们已经通过SimpleSection.o的结构大致了解了ELF文件的轮廓接着就来看看ELF文件的结构格式。 ELF目标文件格式的最前部是ELF文件头ELF Header它包含了描述整个文件的基本属性比如ELF文件版本、目标机器型号、程序入口地址等。 我们可以用readelf命令来详细查看ELF文件 [dev1localhost test01]$ readelf -h hello.o ELF 头Magic 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 类别: ELF64数据: 2 补码小端序 (little endian)版本: 1 (current)OS/ABI: UNIX - System VABI 版本: 0类型: REL (可重定位文件)系统架构: Advanced Micro Devices X86-64版本: 0x1入口点地址 0x0程序头起点 0 (bytes into file)Start of section headers: 984 (bytes into file)标志 0x0本头的大小 64 (字节)程序头大小 0 (字节)Number of program headers: 0节头大小 64 (字节)节头数量 13字符串表索引节头 12 从上面输出的结果可以看到ELF的文件头中定义了ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF重定位类型、硬件平台、硬件平台版本、入口地址、程序头入口和长度、段表的位置和长度及段的数量等。 类型 2、段表 我们知道ELF文件中有很多各种各样的段这个段表Section Header Table就是保存这些段的基本属性的结构。 前文中我们使用了“objudmp -h”来查看ELF文件中包含的段结果是SimpleSection里面看到了总共有6个段分别是 “.code”、“.data”、“.bss ”、“.rodata ”、“. comment ”和“. note.GNU-stack ”。实际上的情况却有所不同“objdump -h”命令只是把ELF文件中关键的段显示了出来而省略了其他的辅助性的段比如符号表、字符串表、段名字符串表、重定位表等。我们可以使用readelf工具来查看ELF文件的段它显示出来的结果才是真正的段表结构 注意这是大写的-S [dev1localhost test01]$ readelf -S hello.o 共有 13 个节头从偏移量 0x3d8 开始节头[号] 名称 类型 地址 偏移量大小 全体大小 旗标 链接 信息 对齐[ 0] NULL 0000000000000000 000000000000000000000000 0000000000000000 0 0 0[ 1] .text PROGBITS 0000000000000000 000000400000000000000041 0000000000000000 AX 0 0 1[ 2] .rela.text RELA 0000000000000000 000002f80000000000000048 0000000000000018 I 10 1 8[ 3] .data PROGBITS 0000000000000000 000000840000000000000008 0000000000000000 WA 0 0 4[ 4] .bss NOBITS 0000000000000000 0000008c0000000000000004 0000000000000000 WA 0 0 4[ 5] .rodata PROGBITS 0000000000000000 0000008c0000000000000004 0000000000000000 A 0 0 1[ 6] .comment PROGBITS 0000000000000000 00000090000000000000002e 0000000000000001 MS 0 0 1[ 7] .note.GNU-stack PROGBITS 0000000000000000 000000be0000000000000000 0000000000000000 0 0 1[ 8] .eh_frame PROGBITS 0000000000000000 000000c00000000000000058 0000000000000000 A 0 0 8[ 9] .rela.eh_frame RELA 0000000000000000 000003400000000000000030 0000000000000018 I 10 8 8[10] .symtab SYMTAB 0000000000000000 000001180000000000000180 0000000000000018 11 11 8[11] .strtab STRTAB 0000000000000000 00000298000000000000005d 0000000000000000 0 0 1[12] .shstrtab STRTAB 0000000000000000 000003700000000000000061 0000000000000000 0 0 1 Key to Flags:W (write), A (alloc), X (execute), M (merge), S (strings), I (info),L (link order), O (extra OS processing required), G (group), T (TLS),C (compressed), x (unknown), o (OS specific), E (exclude),l (large), p (processor specific) 目标文件——常用段名 常用段名Value.text代码段存放代码和局部const变量.rela.text重定位表重定位的信息.data保存的是那些已经初始化了的全局静态变量和局部静态变量.bbs存放的是未初始化的全局变量和局部静态变量.rodataread only data 。存放的是只读数据比如字符串常量全局const变量。.comment存放的是编译器的版本信息比如字符串.note额外的编译器信息。比如程序的公司名发布版本号等。.en_frame调用栈信息.rela…en_frame重定位的调用栈信息.systabsymbol table 符号表.strtabstring table ,字符串表用于存储ELE文件中用到的字符串.shstrtabsection string table 段名表 2.1、重定位表 链接器在处理目标文件时须要对目标文件中某些部位进行重定位即代码段和数据段中那些对绝对地址的引用的位置。这些重定位的信息都记录在ELF文件的重定位表里面对于每个须要重定位的代码段或数据段都会有一个相应的重定位表。 “.data”段则没有对绝对地址的引用它只包含了几个常量所以hello.o中没有针对“.data”段的重定位表“.rel.data” 2.2、字符串表 常见的段名为“.strtab”或“.shstrtab”。这两个字符串表分别为字符串表String Table和段表字符串表Section Header String Table。 字符串表用来保存普通的字符串比如符号的名字段表字符串表用来保存段表中用到的字符串最常见的就是段名 sh_name 。 我们可以使用很多工具来查看ELF文件的符号表比如readelf、objdump、nm等比如使用“nm”来查看“hello.o”的符号结果如下 [dev1localhost test01]$ nm hello.o 0000000000000000 D global_init_var 0000000000000004 C global_uninit_var 0000000000000021 T mainU printf 0000000000000000 T show 0000000000000004 d static_var.2183 0000000000000000 b static_var2.2184 [dev1localhost test01]$2.3、查看重定位表 和 字符串表 [dev1localhost test01]$ readelf -a hello.o ELF 头Magic 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 类别: ELF64数据: 2 补码小端序 (little endian)版本: 1 (current)OS/ABI: UNIX - System VABI 版本: 0类型: REL (可重定位文件)系统架构: Advanced Micro Devices X86-64版本: 0x1入口点地址 0x0程序头起点 0 (bytes into file)Start of section headers: 984 (bytes into file)标志 0x0本头的大小 64 (字节)程序头大小 0 (字节)Number of program headers: 0节头大小 64 (字节)节头数量 13字符串表索引节头 12节头[号] 名称 类型 地址 偏移量大小 全体大小 旗标 链接 信息 对齐[ 0] NULL 0000000000000000 000000000000000000000000 0000000000000000 0 0 0[ 1] .text PROGBITS 0000000000000000 000000400000000000000041 0000000000000000 AX 0 0 1[ 2] .rela.text RELA 0000000000000000 000002f80000000000000048 0000000000000018 I 10 1 8[ 3] .data PROGBITS 0000000000000000 000000840000000000000008 0000000000000000 WA 0 0 4[ 4] .bss NOBITS 0000000000000000 0000008c0000000000000004 0000000000000000 WA 0 0 4[ 5] .rodata PROGBITS 0000000000000000 0000008c0000000000000004 0000000000000000 A 0 0 1[ 6] .comment PROGBITS 0000000000000000 00000090000000000000002e 0000000000000001 MS 0 0 1[ 7] .note.GNU-stack PROGBITS 0000000000000000 000000be0000000000000000 0000000000000000 0 0 1[ 8] .eh_frame PROGBITS 0000000000000000 000000c00000000000000058 0000000000000000 A 0 0 8[ 9] .rela.eh_frame RELA 0000000000000000 000003400000000000000030 0000000000000018 I 10 8 8[10] .symtab SYMTAB 0000000000000000 000001180000000000000180 0000000000000018 11 11 8[11] .strtab STRTAB 0000000000000000 00000298000000000000005d 0000000000000000 0 0 1[12] .shstrtab STRTAB 0000000000000000 000003700000000000000061 0000000000000000 0 0 1 Key to Flags:W (write), A (alloc), X (execute), M (merge), S (strings), I (info),L (link order), O (extra OS processing required), G (group), T (TLS),C (compressed), x (unknown), o (OS specific), E (exclude),l (large), p (processor specific)There are no section groups in this file.本文件中没有程序头。重定位节 .rela.text 位于偏移量 0x2f8 含有 3 个条目偏移量 信息 类型 符号值 符号名称 加数 000000000011 00050000000a R_X86_64_32 0000000000000000 .rodata 0 00000000001b 000e00000002 R_X86_64_PC32 0000000000000000 printf - 4 000000000036 000d00000002 R_X86_64_PC32 0000000000000000 show - 4重定位节 .rela.eh_frame 位于偏移量 0x340 含有 2 个条目偏移量 信息 类型 符号值 符号名称 加数 000000000020 000200000002 R_X86_64_PC32 0000000000000000 .text 0 000000000040 000200000002 R_X86_64_PC32 0000000000000000 .text 21The decoding of unwind sections for machine type Advanced Micro Devices X86-64 is not currently supported.Symbol table .symtab contains 16 entries:Num: Value Size Type Bind Vis Ndx Name0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 FILE LOCAL DEFAULT ABS hello.c2: 0000000000000000 0 SECTION LOCAL DEFAULT 1 3: 0000000000000000 0 SECTION LOCAL DEFAULT 3 4: 0000000000000000 0 SECTION LOCAL DEFAULT 4 5: 0000000000000000 0 SECTION LOCAL DEFAULT 5 6: 0000000000000000 4 OBJECT LOCAL DEFAULT 4 static_var2.21847: 0000000000000004 4 OBJECT LOCAL DEFAULT 3 static_var.21838: 0000000000000000 0 SECTION LOCAL DEFAULT 7 9: 0000000000000000 0 SECTION LOCAL DEFAULT 8 10: 0000000000000000 0 SECTION LOCAL DEFAULT 6 11: 0000000000000000 4 OBJECT GLOBAL DEFAULT 3 global_init_var12: 0000000000000004 4 OBJECT GLOBAL DEFAULT COM global_uninit_var13: 0000000000000000 33 FUNC GLOBAL DEFAULT 1 show14: 0000000000000000 0 NOTYPE GLOBAL DEFAULT UND printf15: 0000000000000021 32 FUNC GLOBAL DEFAULT 1 mainNo version information found in this file. [dev1localhost test01]$ 六、调试信息 如果我们在GCC编译时加上“-g”参数编译器就会在产生的目标文件里面加上调试信息我们通过readelf等工具可以看到目标文件里多了很多“debug”相关的段 [dev1localhost test01]$ gcc -c hello.c -o hello.o -g [dev1localhost test01]$ objdump -h hello.ohello.o 文件格式 elf64-x86-64节 Idx Name Size VMA LMA File off Algn0 .text 00000041 0000000000000000 0000000000000000 00000040 2**0CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE1 .data 00000008 0000000000000000 0000000000000000 00000084 2**2CONTENTS, ALLOC, LOAD, DATA2 .bss 00000004 0000000000000000 0000000000000000 0000008c 2**2ALLOC3 .rodata 00000004 0000000000000000 0000000000000000 0000008c 2**0CONTENTS, ALLOC, LOAD, READONLY, DATA4 .debug_info 00000129 0000000000000000 0000000000000000 00000090 2**0CONTENTS, RELOC, READONLY, DEBUGGING5 .debug_abbrev 000000a9 0000000000000000 0000000000000000 000001b9 2**0CONTENTS, READONLY, DEBUGGING6 .debug_aranges 00000030 0000000000000000 0000000000000000 00000262 2**0CONTENTS, RELOC, READONLY, DEBUGGING7 .debug_line 00000041 0000000000000000 0000000000000000 00000292 2**0CONTENTS, RELOC, READONLY, DEBUGGING8 .debug_str 00000119 0000000000000000 0000000000000000 000002d3 2**0CONTENTS, READONLY, DEBUGGING9 .comment 0000002e 0000000000000000 0000000000000000 000003ec 2**0CONTENTS, READONLY10 .note.GNU-stack 00000000 0000000000000000 0000000000000000 0000041a 2**0CONTENTS, READONLY11 .eh_frame 00000058 0000000000000000 0000000000000000 00000420 2**3CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA 参考 1、《程序员的自我修养链接装载与库》
http://www.dnsts.com.cn/news/243135.html

相关文章:

  • 服装网站建设课程网站收录提交接口
  • 商业十大网站html5手机网站模板
  • 酒店怎样做网站好评php 用什么做网站服务器吗
  • 上海企乐网站制作公司wordpress知言主题
  • 凡科建站代理登录crm系统客户管理系统
  • 深圳建立企业网站wordpress丢失连接
  • 驻马店营销型网站建设优化推广app开发大概费用多少钱
  • 查房价的官方网站简述网站开发步骤
  • 做模具在哪个网站找工作得到app公司
  • 东莞深圳网站建设寺院的网站怎么做
  • 有关建筑的网站金坛市住房和城乡建设局 网站
  • 有织梦后台系统怎么做网站广德网站开发
  • 网站建设 销售电商平台市场调研报告
  • 怎么弄一个公司网站苏州市建设中心网站首页
  • 厦门网站建设培训费用logo智能设计一键生成器
  • 培训营销型网站建设什么是企业网站营销
  • 优秀的电商设计网站有哪些内容建一个网站怎么赚钱
  • 做外贸网站如何如何查看网络服务商
  • 菏泽做网站建设找哪家好业绩显示屏 东莞网站建设技术支持
  • 瓷砖网站建设关键词快速优化排名软件
  • 做网站搞笑口号淮安网站建设个人博客
  • 建设监理收录网站大沥网站建设公司
  • 郑州 网站建设:一个域名怎么做两个网站
  • 中国书画画廊网站模板python制作的网站
  • 公司做网站的流程作图的步骤注册局官网
  • 用wordpress仿a站美食网页制作素材
  • 手机网站制作步骤做服装设计看哪些网站
  • 网站开发后期要解决的问题管理课程培训
  • 一个空间放两个php网站淳安网站建设制作
  • ps教程网站有哪些五年级上册语文优化设计答案