首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >readelf 'Align‘列单位

readelf 'Align‘列单位
EN

Stack Overflow用户
提问于 2019-03-29 13:53:39
回答 1查看 299关注 0票数 3

我有下面这个简单的"hello world“程序:

代码语言:javascript
复制
#include <stdio.h>

int main() {
  printf("Hello world.\n");
  return 0;
}

我将它编译为

代码语言:javascript
复制
gcc -static -O0 -g -std=gnu11 -o test_helloworld test_helloworld.c -lpthread

现在,我想通过发出readelf -l命令来检查它的内存段,并获得以下输出:

代码语言:javascript
复制
Elf file type is EXEC (Executable file)
Entry point 0x400890
There are 6 program headers, starting at offset 64

Program Headers:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                 0x00000000000c96cf 0x00000000000c96cf  R E    200000
  LOAD           0x00000000000c9eb8 0x00000000006c9eb8 0x00000000006c9eb8
                 0x0000000000001c98 0x00000000000035b0  RW     200000
  NOTE           0x0000000000000190 0x0000000000400190 0x0000000000400190
                 0x0000000000000044 0x0000000000000044  R      4
  TLS            0x00000000000c9eb8 0x00000000006c9eb8 0x00000000006c9eb8
                 0x0000000000000020 0x0000000000000050  R      8
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     10
  GNU_RELRO      0x00000000000c9eb8 0x00000000006c9eb8 0x00000000006c9eb8
                 0x0000000000000148 0x0000000000000148  R      1

我被Align列搞糊涂了:这些数字是以字节还是千字节为单位的?我认为align应该等于页面大小。为什么我会得到这些数字?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-11-13 01:49:01

这就是System V Application Binary Interfacep_align的评价

值0和1表示不需要对齐。否则,p_align应该是2的正整数幂,并且p_vaddr应该等于p_offset,模为p_align。

所以p_align不需要等于页面大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55411260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档