聊聊目标文件到底长什么样子

为了了解目标文件的布局方式,我写了几行简单但是有非常实用的测试代码 见图


 

在程序中我已经加入了注释,现在我们通过objdumg这个命令来观察一下,还是先上图


我们可以看到这条命令将目标文件文件中的存储区域都标记了出来

<1>.text段为代码段

<2>.data段为数据段,存储的是初始化的全局变量(包括静态全局变量)和已经初始化的静态局部变量

<3>.rodata段为只读存储段,存储的是只读变量和字符串常量

<4>.comment段存储的是编译器版本信息

<5>.note.GNU-stack段堆栈提示段

<6>.eh_frame 记录调试信息,详细可以查询Dwarf(http://blog.csdn.net/wuhui_gdnt/article/details/7283483/)


现在我们来证明一下:

观察代码与命令执行结果 代码中一共有两个初始化了的全局整形变量所以一共占8BYUTE,验证。继续观察,代码中一共有3个未初始化的全局变量(包括那个赋值为0的静态全局变量),但是这个是跟不同的编译器与不同的语言实现由管,详情见<程序员的修自我修养>,验证。接着是printf里面的字符串常量HelloWorld\0,一共11个BYTE,存储在.rodata段。


其实这些结果只是在正常的情况下正常的代码下才得到的结论,但是还是有许多的其他情况,有兴趣的朋友可以将.c改为.cpp文件,然后在各种MSVC编译器下查看字符串常量的摆放位置。或者我们可以利用GCC提供的扩充机制__attribute__((section("FOO")))int num来自定存储


对这方面有兴趣的朋友可以看一看<程序员的自我修养>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在实现聊天室时,首先需要选择一个合适的编程语言,如C语言。其次,需要考虑实现哪些功能,如群聊、单聊、文件传送等。下面分别介绍如何实现这些功能。 1.群聊功能的实现 群聊功能可以通过服务端实现,客户端输入信息发送给服务端,服务端向所有连接的客户端广播消息。具体实现的步骤如下: 服务端: 1)创建套接字并绑定地址; 2)监听连接; 3)接收客户端连接请求; 4)接收客户端信息并进行广播。 客户端: 1)创建套接字并连接服务端; 2)输入并发送信息。 2.单聊功能的实现 单聊功能可以通过客户端实现,客户端输入信息发送给指定的客户端。具体实现步骤如下: 服务端: 1)创建套接字并绑定地址; 2)监听连接; 3)接收客户端连接请求; 4)建立连接后等待客户端信息并转发。 客户端: 1)创建套接字并连接服务端; 2)输入发送信息,包括目标客户端的地址; 3)服务端接收信息后转发给指定客户端。 3.文件传送功能的实现 文件传送功能可以通过在TCP协议基础上实现,具体实现步骤如下: 服务端: 1)创建套接字并绑定地址; 2)监听连接; 3)接收客户端连接请求; 4)接收客户端发送的文件并保存。 客户端: 1)创建套接字并连接服务端; 2)选择文件并发送给服务端; 3)服务端接收文件并保存。 以上是简单实现聊天室的主要功能,当然还有很多细节需要考虑和完善。实现聊天室这一过程需要多方面的知识储备,包括网络编程、文件传输等技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值