Я пытаюсь изучить NASM... Я попытался сделать базовую программу с 1 инициализированными и 1 неинициализированными данными {буфер -> неинициализированный, буфер2 -> инициализированный}:
SECTION .data
buffer2 dw 0x4140
SECTION .bss
buffer resb 64
SECTION .text
_start:
mov byte [buffer], 1
mov byte [buffer2], 2
потом собрал с nasm -f elf64 test.S
, получил test.o
файл, потом пытался искать адреса с которых начинаются обе секции, но они указывают на один и тот же адрес.. понятия не имею почему.. ds:00
test.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <_start>:
0: c6 04 25 00 00 00 00 mov BYTE PTR ds:0x0,0x1
7: 01
8: c6 04 25 00 00 00 00 mov BYTE PTR ds:0x0,0x2
f: 02
Поэтому я попытался найти объяснение, и единственное решение, которое я нашел, было в выводе readelf -S test.o
:
There are 8 section headers, starting at offset 0x40:
Section Headers:
[Nr] Name Type Address Offset
Size EntSize Flags Link Info Align
[ 0] NULL 0000000000000000 00000000
0000000000000000 0000000000000000 0 0 0
[ 1] .data PROGBITS 0000000000000000 00000240
0000000000000002 0000000000000000 WA 0 0 4
[ 2] .bss NOBITS 0000000000000000 00000250
0000000000000040 0000000000000000 WA 0 0 4
[ 3] .text PROGBITS 0000000000000000 00000250
0000000000000010 0000000000000000 AX 0 0 16
[ 4] .shstrtab STRTAB 0000000000000000 00000260
0000000000000037 0000000000000000 0 0 1
[ 5] .symtab SYMTAB 0000000000000000 000002a0
00000000000000c0 0000000000000018 6 8 8
[ 6] .strtab STRTAB 0000000000000000 00000360
000000000000001e 0000000000000000 0 0 1
[ 7] .rela.text RELA 0000000000000000 00000380
0000000000000030 0000000000000018 5 3 8
BSS и DATA имеют разный размер.. но я так и не понял, почему в objdump он передает на один и тот же адрес...
Спасибо!
test.o
– это объектный файл. Истинные адресаbuffer
иbuffer2
пока неизвестны и будут заполнены при линковке. Свяжите объект с полной программой и разберите ее, чтобы увидеть истинные адреса. - person fuz   schedule 19.01.2021mov BYTE PTR ds:0x402000,0x2
иmov BYTE PTR ds:0x402004,0x1
- person Como Stas   schedule 19.01.2021mystack resb 256
, будет установленоmystack
в конец блока из 256 байтов, адрес | смещение на следующий байт после блока из 256 байт. - person rcgldr   schedule 19.01.2021