próbowałem tego, ale nie zawahał się z odpowiedzią poniżej pytania gdzie hello_world-1.c
jestwielkość i objdump zgłaszać różne rozmiary dla segmentu tekstu
#include<stdio.h>
int main(void)
{
printf("Hello world\n");
return 0;
}
Dokonane komendy:
[[email protected] ~]$ gcc -Wall -Wextra -c hello_world-1.c
[[email protected] ~]$ gcc -o hello_world-1 hello_world-1.o
[[email protected] ~]$ size hello_world-1 hello_world-1.o
text data bss dec hex filename
1222 280 4 1506 5e2 hello_world-1
139 0 0 139 8b hello_world-1.o
[[email protected] ~]$ objdump -h hello_world-1.o
hello_world-1.o: file format elf32-i386
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000003b 00000000 00000000 00000034 2**0
CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE
1 .data 00000000 00000000 00000000 0000006f 2**0
CONTENTS, ALLOC, LOAD, DATA
2 .bss 00000000 00000000 00000000 0000006f 2**0
ALLOC
3 .rodata 0000000c 00000000 00000000 0000006f 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
4 .comment 0000002d 00000000 00000000 0000007b 2**0
CONTENTS, READONLY
5 .note.GNU-stack 00000000 00000000 00000000 000000a8 2**0
CONTENTS, READONLY
6 .eh_frame 00000044 00000000 00000000 000000a8 2**2
CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA
Może ktoś proszę pomóż mi dowiedzieć się, jakie mogą być przyczyny poniższych pytań?
- Komenda
size
nie listy segment stosu lub sterty dlahello_world
lubhello_world.o
. Jaki może być tego powód? (dla powyższego pytania odpowiedź brzmi, ponieważ nie nazwałem żadnej funkcji, a także nie użyto żadnego segmentu sterty, dlatego nie pojawiły się tutaj.) Czy mam rację?) - Istnieją brak zmiennych globalnych w
hello_world-1.c
. Dlaczegosize
doniesienia, że danei BSS segmenty mają zerowej długości dla pliku obiektu ale niezerowej długości dla wykonywalnego? size
iobjdump
zgłosić różne rozmiary dla segmentu tekstu. Czy możesz doradzić, skąd pochodzą rozbieżności?
Próbowałem, ale nie udało mi się wyciągnąć wniosków na temat powyżej 3 pytań. Doceń swoją pomoc w tej sprawie.
Nie masz globalnych * zmiennych *, ale masz dane globalne: tablicę 13 znaków 'char's odpowiadających twojemu literałowi. Plus wszystko, co może być zadeklarowane w 'stdio.h'. –
Dla nr 3: czy "rozmiar -A hello_world-1.o" wyświetla rozmiar segmentu tekstu bliżej tego, co wyświetla "objdump"? –