How to change alignment of code segment in ELF

前端 未结 1 2080
难免孤独
难免孤独 2021-01-12 03:37

In ELF binary, how to change the alignment of loadable segments? In the below example (See right corner), I want to reduce the 0x200000 to 0x40960.

  LOAD           


        
相关标签:
1条回答
  • 2021-01-12 04:35

    I don't know if you really want to do that but you can change the max page size with ld -z max-page-size=4096:

    $ gcc foo.c && readelf -Wl ./a.out | grep LOAD 
    LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 0x0008c4 R E 0x200000
    LOAD 0x0008c8 0x00000000006008c8 0x00000000006008c8 0x000250 0x000260 RW  0x200000
    $ gcc foo.c -Wl,-z,max-page-size=4096 && readelf -Wl ./a.out | grep LOAD 
    LOAD 0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 0x0008c4 R E 0x1000
    LOAD 0x0008c8 0x00000000004018c8 0x00000000004018c8 0x000250 0x000260 RW  0x1000
    

    Apparently, the reason is that the linker tries to align the segments to the maximum page size available on you architecture (on you CPU?). The standard default page size is 4KiB on x86 but greater pages exist (such as 2MiB pages).

    0 讨论(0)
提交回复
热议问题