所以我有一个NASM程序,在32位模式下用-g编译。 编译命令为:
nasm -f elf -g -dOS_LINUX bst.asm
nasm -f elf -g -dOS_LINUX ioargs.asm
ld -m elf_i386 bst.o ioargs.o -o bst
当我断点到第一条指令并执行
layout asm
时,地址
是 0x8049000
而不是 0x8048000
,这是 Linux 上 .text
段开始的已知地址。
我注意到
0x8049000 - 0x8048000
是 4096
,它是 i386 上的一页大小。
那么为什么会有这样的偏移呢?发生什么事了?