LINUX.ORG.RU

Секции в в объектном файле


0

0

При компиляции gcc исходного файла, который содержит несколько функций, итоговый объектный файл включает в себя лишь одну секцию .text, в отличии от ms vc который каждую функцию размещает в отдельную секцию. Возможно ли такое в gcc?

anonymous

например через __attribute__ ((section (".sect1"))) можно указать секцию, например:

__attribute__ ((section (".sect_foo"))) int foo(char)
{
	return 0;
}

 __attribute__ ((section (".sect_bar"))) long bar(float)
{
	return -1;
}

> objdump -h main.exe

main.exe:     file format pei-i386

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0003d950  00401000  00401000  00000400  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE, DATA
  1 .data         00000190  0043f000  0043f000  0003de00  2**4
                  CONTENTS, ALLOC, LOAD, DATA
>  2 .sect_foo     00000014  00440000  00440000  0003e000  2**2
                  CONTENTS, ALLOC, LOAD, CODE
>  3 .sect_bar     0000000c  00441000  00441000  0003e200  2**2
                  CONTENTS, ALLOC, LOAD, CODE
  4 .rdata        00002640  00442000  00442000  0003e400  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 .bss          00004be0  00445000  00445000  00000000  2**4
                  ALLOC
  6 .idata        0000079c  0044a000  0044a000  00040c00  2**2
                  CONTENTS, ALLOC, LOAD, DATA

Eshkin_kot ★★
()
Ответ на: комментарий от anonymous

> В объектном файле - секция, а в адресном пространстве процесса - сегмент.

$eu-readelf -S a2p
There are 31 section headers, starting at offset 0x1d1f0:

Section Headers:
[Nr] Name                 Type         Addr     Off    Size   ES Flags Lk Inf Al

....

[14] .text                PROGBITS     080489e0 0019e0 00e764  0 AX     0   0 16

...

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Ну да, правильно. В двоичном объектном файле есть секция подназванием .text, а в адресном пространстве процесса - сегмент с тем же самым названием.

anonymous
()
Ответ на: комментарий от anonymous

При линковке с использованием статической библиотеки в итоговый файл попадают все символы содержащиеся в секции .text даже если из объектного файла входящего в состав библиотеки нужна лишь одна функция, в итоге размер результирующего файла возрастает в несколько раз. Нужно в системе, в которой динамическая линковка пока не реализована.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.