Linux下利用objdump查看文件空间地址分布

在linux中新建test.c文件,源代码如下:

1 #include<stdio.h>
2 int a=1;
3 int main()
4 {
5     printf("a is %d.",a);
6     return 0;
7 }

然后分别生成test.o和test文件

$ gcc -c test.c
$ gcc -o test test.c

利用objdump命令分别查看test.o和test

首先看test.o

file format elf64-x86-64:文件所在平台属性,这里是64位x86处理器平台

Sections:

Size: 段的大小,字节为单位

VMA: 段在虚拟地址中的位置

LMA:段在加载地址中的位置

File off: File offset,段的起始位置

Algn:字节对齐方式,2**2表示2的平方即为4,2**3表示2的3次方即为8

这里面重要的有

.text(代码段)

.data(数据段)

.bss

查看test文件的空间位置:

段的数量明显多于未链接文件test.o

我们将test.c代码复制到test1.c文件,并稍加修改

可以看到,.text代码段和.data数据段大小都增加了,

.text代码段增大了9字节(22变为31)

.data数据段增加了一个int型4字节变量大小(源代码中int b=2,多了一个变量b)

注意.data的File off起始位置为00000074,而不是00000071,这是字节对齐而导致的

有个待解答问题:

为什么.text代码段和.data数据段以及其他段的字节对齐方式可以不一样呢?

时间: 2024-10-12 15:55:26

Linux下利用objdump查看文件空间地址分布的相关文章

Linux下利用Ret2Libc绕过DEP

Linux下利用Ret2Libc绕过DEP ⑴.  原理分析: 系统库函数通常是不受DEP(关于DEP,可以查看我之前文章的详细介绍)保护的,所以通过将返回地址指向系统函数可以绕过DEP保护,所以可以通过调研系统函数system()获得shell. ⑵.环境准备: i.漏洞代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> void flow()

Linux下利用nginx实现负载均衡

linux下利用nginx实现负载均衡 前提条件: 1,安装好jdk 2,安装好tomcat和nginx(可以参考我前两篇文章) 满足前提条件后,要用nginx实现负载均衡,主要是靠配置nginx的配置文件. 我们要实现的架构图如下: 1.分别部署3个tomcat,端口分别为8080,8081,8082 drwxr-xr-x 9 root root 4096 Mar 11 13:41 tomcat8-8080drwxr-xr-x 9 root root 4096 Mar 11 17:27 tom

linux下利用elk+redis 搭建日志分析平台教程

linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm elk 日志分析+redis数据库可以创建一个不错的日志分析平台了,下面我们来看一篇在linux下利用elk+redis 搭建日志分析平台教程,希望例子对各位有帮助. 这个是最新的elk+redis搭建日志分析平台,今年时间是2015年9月11日. Elk分别为 elasticsearch,logstash, kibana 官网为:https://www.elasti

linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改

原文地址:http://www.cnblogs.com/firtree/p/4028354.html linux下利用openssl来实现证书的颁发(详细步骤) 1.首先需要安装openssl,一个开源的实现加解密和证书的专业系统.在centos下可以利用yum安装. 2.openssl的配置文件是openssl.cnf,我们一般就是用默认配置就可以.如果证书有特殊要求的话,可以修改配置适应需求.这样必须把相关的文件放到配置文件指定的目录下面. 3.首先需要利用openssl生成根证书,以后的服

【java】 linux下利用nohup后台运行jar文件包程序

Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 java -jar XXX.jar & &代表在后台运行. 特定:当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行. 继续改进,如何让窗口关闭时,程序仍然运行? 方式三 nohup java -jar XXX.jar & nohup 意思是不挂断运行命令,当账户退出或终端关闭时,

(转)LINUX下Live555不能获取ip地址解决方法

linux下运行live55 显 示如图 :没有获取ip:  ip是0.0.0.0 live555在不知道本地IP地址与网络接口的情况下,通过一个在本地某端口建立一个UDP连接,然后把这个UDP连接加入 到一个组播组 ,当然要对这个组播组进行相应的设置,比如TTL,回环等等:然后通过UDP连接发送一个数据:最后通过这个UDP连接接收这个数据,并且解析相应的发送地址:大概流程就是这样了. 具体的代码片段live555:groupsock/GroupsockHelper.cpp里:因此我们设置固定的

Linux下修改Oracle监听地址

如果你的服务器换了ip怎么办? 如果你的服务器换了名字怎么办? 以前的小伙伴怎么办? 以前的老客户怎么办? 没关系,简单教你修改监听地址,老朋友随便找! 想要修改监听地址首先要找到两个文件,确定两样东西! 第一 你的主机名字? 第二 你的IP地址? 第三 你的listener.ora在哪里? 第四 你的tnsnames.ora在哪里? 原来的文件监听的是localhost,这个名字在/etc/hosts中会被映射成Ip地址127.0.0.1 lisenter.ora 目录在 /opt/oracl

linux下c++filter查看函数修饰名

c++函数在linux系统下编译之后会变成类似下面的样子: _ZNK4Json5ValueixEPKc 在linux命令行使用c++filter: [email protected]:~ $ c++filt _ZNK4Json5ValueixEPKc Json::Value::operator[](char const*) const 这样就得到函数的原始名称 如果没有安装c++filter, 可以自行搜索.linux下c++filter查看函数修饰名,布布扣,bubuko.com

linux下利用echo命令输出带颜色以及带字体格式的字符串

echo输出颜色字体:格式 例: echo  –e  "\033[31m被改变字体颜色的字符\033[0m" 其中\033[31m开始, *其中31(3开头控制前景色)中的1是红色,将此数值替换为2是绿色,3棕色,4蓝色,5紫色,6青绿色 *背景色控制由4开头的字符串 *单字符设置字体(1为粗体:4为下划线:5为闪烁:7反转前景色.背景色) 例:36:41:1 \033[0m结束 格式如下(#号代表数字,其中3#;4#;#可以只写一项或几项!一定要有结束字符,否则终端以后显示的字符都是