问题描述
我正在尝试学习 NASM...我尝试使用 1 个已初始化和 1 个未初始化数据 {buffer -> uninitialized,buffer2 -> initialized} 编写一个基本程序:
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 中它传输到相同的地址...
谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)