objdump 输出中的“Algn”2**2 和 2**0 意味着什么?

2024-04-15

下面的文件中这是什么意思?2**2 and 2**0

$ objdump -h main.o

main.o:     file format elf32-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000000b  00000000  00000000  00000034  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .data         00000000  00000000  00000000  00000040  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  2 .bss          00000000  00000000  00000000  00000040  2**2
                  ALLOC
  3 .note.GNU-stack 00000000  00000000  00000000  00000040  2**0
                  CONTENTS, READONLY, CODE

I would assume that 2**2 means 22, or 4 byte alignment, while 2**0 means no (one byte) alignment.

该值来自于sh_addralignELF 节头的字段。这ELF规范 http://www.skyfree.org/linux/references/ELF_Format.pdf状态(强调我的):

sh_addralign某些部分具有地址对齐限制。例如,如果一个节包含一个 双字,系统必须确保整个部分的双字对齐。 也就是说,sh_addr 的值必须与 0 同余,对 sh_addralign。现在,只允许 0 和 2 的正整数幂。值 0 和 1 表示该部分没有对齐约束。

As 雷·托尔提到 https://stackoverflow.com/questions/21718388/what-does-an-algn-of-22-and-20-mean#comment32842272_21718432,由于对齐必须是 2 的幂,因此只有这样才有意义objdump将该值表示为 2 的幂2**x符号。

请注意,在某些语言中,例如Python http://docs.python.org/2/reference/expressions.html#the-power-operator and FORTRAN http://www.csee.umbc.edu/~squire/fortranclass/summary.shtml#Oper, **是幂或指数运算符。


看着objdump.c http://www.opensource.apple.com/source/gdb/gdb-961/src/binutils/objdump.c, 我们看:

static void
dump_section_header (bfd *abfd, asection *section,
             void *ignored ATTRIBUTE_UNUSED)
{
  // ...
  printf ("  %08lx  2**%u", (unsigned long) section->filepos,
      bfd_get_section_alignment (abfd, section));

And in objdump.h http://stuff.mit.edu/afs/sipb/project/bounds/include/bfd.h:

#define bfd_get_section_alignment(bfd, ptr) ((ptr)->alignment_power + 0)

哪里的alignment_power成员bfd is:

/* The alignment requirement of the section, as an exponent of 2 -
   e.g., 3 aligns to 2^3 (or 8). */

unsigned int alignment_power;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

objdump 输出中的“Algn”2**2 和 2**0 意味着什么? 的相关文章

  • 为什么调用非 const 成员函数而不是 const 成员函数?

    为了我的目的 我尝试包装一些类似于 Qt 共享数据指针的东西 经过测试 我发现当应该调用 const 函数时 会选择它的非 const 版本 我正在使用 C 0x 选项进行编译 这是一个最小的代码 struct Data int x con
  • 具有交替类型的可变参数模板参数包

    我想知道是否可以使用参数包捕获交替参数模式 例如 template
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 按 Esc 按键关闭 Ajax Modal 弹出窗口

    我已经使用 Ajax 显示了一个面板弹出窗口 我要做的是当用户按 Esc 键时关闭该窗口 这可能吗 如果有人知道这一点或以前做过这一点 请帮助我 Thanks 通过以下链接 您可以通过按退出按钮轻松关闭窗口 http www codepro
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没
  • 解释一下 AF 标志在 x86 指令中如何工作?

    我有一个小型 8086 模拟器 并且我已经有一个长期存在的错误了大约 2 年 因为 AF 在 sub 和 add 指令内无法正常运行 我当前计算其值的方法是 8 位数字和减法 uint8 t base subt base base 0xF
  • 运行 Azure 函数时路径中存在非法字符

    我有一个 Azure 函数 它已经运行了一整天 大约二十分钟前 当我尝试单击 Visual Studio 中的运行按钮时 开始出现错误 它成功构建 然后在启动时显示并错误 仅指出 路径中的非法字符 Visual Studio 我检查了 gi
  • Signal R Native Android 应用程序协商失败

    我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用程序 它只是一个基本的集线器文件 我想用它来测试一些东西 但到目前为止我还没有运气 有人可以看看我做错的事情吗 每次我尝试运行它时 我都会收到以下堆栈竞赛
  • 在 C# 中读取/写入大型 XML 文件

    我正在开发一个带有 XML 数据库的应用程序 我有很大的 XML 文件 我必须在其中读取和写入数据 问题是我不想将整个 XML 文件加载到内存中 也不想因为性能问题而循环遍历整个文件 因为如果我将整个文件加载到内存中 这将影响应用程序性能
  • 不使用 C# 解析器获取字段的行号

    我想获取类型字段的行 s 要获取方法中语句的第 行 非常简单 Type type typeof MyClass MethodInfo methodInfo type GetMethod SomeMethod int token method
  • 空 catch 与 try-catch 语句中的“catch Exception”相同吗?

    try catch Exception 我可以写吗 try catch 这在 C NET 3 5 中可以吗 代码看起来更好 但我不知道是否相同 他们是not一样的 catch Exception 将仅捕获托管异常 catch 也会捕获非 C
  • 类继承通用字典和Interface

    我有一个继承通用字典和接口的类 public class MyDictionary Dictionary
  • Swagger 不生成 swagger.json

    我在一个解决方案中拥有 asp net core MVC 项目和单独的 WebApi 项目 我按照 github 上的文档添加了 swagger 这是我的 mvc 项目的 Startup cs public void ConfigureSe
  • 有条件地忽略属性序列化

    我有一个 Asp Net WebApi 项目 我想返回 Json 格式的产品列表和一个特定产品 这是我的产品型号 public class Product public int Id get set public string ShortS
  • 如何在 C# 中对 csv 文件进行分组并从中创建嵌套字典?

    我有一个 csv 文件 我想用它制作一个嵌套字典 该文件如下所示 FilmMaker MovieTitle EndDate FunnyM F1 20191210 FunnyM F2 20191211 FunnyM F3 20191212 F
  • 比较 C++ 中的结构时未找到 == 运算符

    比较以下结构的两个实例 我收到错误 struct MyStruct1 MyStruct1 const MyStruct2 my struct 2 const int an int 1 my struct 2 my struct 2 an i

随机推荐

  • 从链接到 Oracle 的 SQL Server 编写 SQL 查询时如何指定日期文字?

    我有一个链接到 Oracle 12 1 数据库的 SQL Server 12 0 数据库 我想在 SQL Server 数据库中创建一个视图 该视图返回按日期筛选的 Oracle 表中的数据 Oracle 表在日期列上有一个索引 成功运行的
  • jQuery Uncaught TypeError:无法读取未定义的属性“fn”(匿名函数)

    全部 我下载的一些代码出现错误 这是代码 wl Alert v 1 1 description Handles alert boxes dependency jquery UI Slider fadeOutSlide plugin fn w
  • Java - 如何使用类文件?

    我是 Java 新手 想知道如何将类文件导入 netbeans 并使用它 我知道类文件是机器可读的字节代码 但我不关心幕后发生了什么 我只想将其导入到我当前的项目中并让它识别它 以便我可以使用该类 此外 类文件嵌入在 JAR 文件中 我将
  • 右对齐文本?

    我试图举一个例子来试验不同的对齐方式作为演示 左对齐 居中 右对齐 对齐和中左对齐文本都很容易 如我的演示所示 你可以看这个例子here http jsbin com avuzuf 1 edit在 JSBin 上 如何获得右对齐的文本而不弄
  • 在骨干模型上声明变量而不设置默认值

    我刚刚开始使用backbone js 我正在寻找一种在模型上声明字段而无需提供默认值的方法 它实际上仅供参考 以便当我开始创建实例时 我可以看到需要初始化哪些字段 用java之类的东西我会写 public class CartLine St
  • Doctrine OneToMany 关系错误

    我试图通过 Symfony2 2 3 0 使用 Doctrine 2 2 3 在数据库中的对象上建立一些 ManyToOne OneToMany 关系 但出现了一个奇怪的错误 以下是对象的相关部分 一种产品的许多属性 Product ORM
  • mongoengine - 忽略架构验证的额外字段

    我正在尝试查询我的数据库 目前 某些记录具有未包含在我的模型架构中的额外字段 由于错误 但我想处理这些情况 当我尝试查询数据库并将记录转换为模式时 出现以下错误 FieldDoesNotExist The field X does not
  • 从旧的 Git 提交中删除私有信息

    我有一个使用 Git 进行版本控制的项目 我想将其开源 但其中包含一些特定于其最初使用环境的私人信息 我将更改相关信息以从未包含在存储库中的配置文件加载 我意识到我应该首先这样做 但由于私人信息仍然存在于之前的提交中 我该如何将其从我的历史
  • 如何使用服务更改作用域变量?

    我有一个应用程序 应用程序内部有一个注册和登录表单 通过注册表单 当用户创建帐户时 他们会自动登录 通过登录表单 用户也可以登录 显然 我有两个控制器 一个用于注册表单 一个用于登录表单 我希望他们能够共享一个服务 logIn 因为两种形式
  • 基于 Spring Boot AMQP 的 JmsListener 在 TextMessage 上失败

    我有一个 Spring Boot 应用程序 在检索类型的 JMS 消息时遇到问题TextMessage来自 ActiveMQ 代理 如果消费者尝试从代理检索消息 它无法自动将消息转换为 TextMessage 而是将其视为 ByteMess
  • 如何从 json 字符串获取对象列表 c# Newtonsoft.json

    我正在尝试将 JSON 字符串转换为对象列表 但收到错误 无法将当前 JSON 对象反序列化为 List 类型 因为该类型需要 JSON 数组才能正确反序列化 我检索 json 它看起来像这样 Code 0 Message OK Data
  • Internet Explorer 开发人员工具如何保留导航日志?

    我正在寻找在 Internet Explorer 开发人员控制台中记录内容以保留页面刷新的方法 在 Google Chrome 和 Firefox 的 Firebug 下 这是一个选项 但我在 IE 下找不到它 我用的是IE 9 在 IE
  • 防止运行测试时优化掉未使用的静态函数

    我正在编写一个将利用 LLVM 的库 通过inkwell https github com TheDan64 inkwell 来 JIT 编译一些函数 这些函数需要能够回调我的代码中的一些 Rust 函数 我让它工作 但我的单元测试不起作用
  • 使用一个 AJAX 响应更新两个 div

    全部 我正在使用 jQuery AJAX 调用一个文件来基本上保存某人是否喜欢某首歌 我正在尝试做类似以下的事情 var html ajax type POST url save song php data song id song id
  • R:在数据框中插入多行(可变数量)

    我有一个数据框 例如 5 行 用于 2 个可观察值 我需要在数据框中插入 虚拟 或 零 行 以便每个可观察的行数相同 并且可以大于 N 行 以获得更长的行数 例如 This is what I have x c a a b b b y c
  • 比较 2 个单独的 csv 文件并将差异写入新的 csv 文件 - Python 2.7

    我正在尝试比较 python 中的两个 csv 文件 并将差异保存到 python 2 7 中的第三个 csv 文件中 import csv f1 open olddata file1 csv oldFile1 csv reader f1
  • JPanel 未显示

    为什么 UI 没有显示在我的下面的代码中 public class GUI extends JPanel public GUI String name String address List
  • php中包含bootstrap和js

    我需要一双新的眼睛来看待这个 我直接从我的一把老小提琴中获取代码https jsfiddle net RachGal fs9u6mwe 1 https jsfiddle net RachGal fs9u6mwe 1 在大学厨房网站上显示照片
  • Terraform 条件配置

    我对 Terraform 配置有疑问 当我第一次运行 terraform 时 我使用在 AWS 控制台中生成的 SSH 密钥 该密钥正在添加到ubuntu用户 Ubuntu 16 04 AMI 然后我跑remote exec配置 provi
  • objdump 输出中的“Algn”2**2 和 2**0 意味着什么?

    下面的文件中这是什么意思 2 2 and 2 0 objdump h main o main o file format elf32 i386 Sections Idx Name Size VMA LMA File off Algn 0 t