C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 在objdump的输出中,2 ** 2和2 ** 0的“Algn”是什么意思?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这在下面的文件中意味着什么? 2 ** 2和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,DATA
  2 .bss          00000000  00000000  00000000  00000040  2**2
                  ALLOC
  3 .note.GNU-stack 00000000  00000000  00000000  00000040  2**0
                  CONTENTS,CODE

解决方法

我假设2 ** 2表示22或4字节对齐,而2 ** 0表示没有(一个字节)对齐.

此值来自ELF节标题的sh_addralign字段. ELF specification州(强调我的):

作为Ray Toal mentioned,由于对齐必须是2的幂,所以只有objdump将这个值用2 ** x表示法表示为2的幂才有意义.

请注意,在某些语言中,例如PythonFORTRAN,**是幂或取幂运算符.

看看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));

并在objdump.h

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

bfd的alignment_power成员是:

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

unsigned int alignment_power;

大佬总结

以上是大佬教程为你收集整理的c – 在objdump的输出中,2 ** 2和2 ** 0的“Algn”是什么意思?全部内容,希望文章能够帮你解决c – 在objdump的输出中,2 ** 2和2 ** 0的“Algn”是什么意思?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。