А что не так? Разбираешь, поди, командой типа
Код:
objdump -b binary -m i386 -Mintel -D kernel.bin
В бинарнике ни слова про базовый адрес, в параметрах ты его тоже не указал, так что objdump принимает его равным нулю.
А в call'ах используются относительные адреса (смещения которые надо прибавить к указателю инструкций), вот и получается:
Код:
$ objdump -b binary -m i386 -Mintel -D kernel.bin
kernel.bin: file format binary
Disassembly of section .data:
00000000 <.data>:
0: 55 push ebp
1: 89 e5 mov ebp,esp
3: 83 ec 10 sub esp,0x10
6: c7 45 fc 64 00 00 00 mov DWORD PTR [ebp-0x4],0x64
d: c9 leave
e: c3 ret
f: 55 push ebp
10: 89 e5 mov ebp,esp
12: 83 ec 10 sub esp,0x10
15: a1 48 00 10 00 mov eax,ds:0x100048
1a: 83 c0 01 add eax,0x1
1d: 89 45 fc mov DWORD PTR [ebp-0x4],eax
20: e8 db ff ff ff call 0x0
25: c9 leave
26: c3 ret
Ну вот я за тебя внимательно прочёл man objdump и вот чего получил:
Код:
$ objdump -b binary -m i386 -Mintel --adjust-vma=0x100000 -D kernel.bin
kernel.bin: file format binary
Disassembly of section .data:
00100000 <.data>:
100000: 55 push ebp
100001: 89 e5 mov ebp,esp
100003: 83 ec 10 sub esp,0x10
100006: c7 45 fc 64 00 00 00 mov DWORD PTR [ebp-0x4],0x64
10000d: c9 leave
10000e: c3 ret
10000f: 55 push ebp
100010: 89 e5 mov ebp,esp
100012: 83 ec 10 sub esp,0x10
100015: a1 48 00 10 00 mov eax,ds:0x100048
10001a: 83 c0 01 add eax,0x1
10001d: 89 45 fc mov DWORD PTR [ebp-0x4],eax
100020: e8 db ff ff ff call 0x100000
100025: c9 leave
100026: c3 ret
Мысль ясна?