#windows #windows-10 #64-bit #windbg
#Windows #windows-10 #64-разрядная #windbg
Вопрос:
Я хотел бы увидеть первые несколько инструкций, которые моя машина выполняет при запуске. На x64 вектор сброса находится по физическому адресу FFFFFFF0. Я включил локальную отладку ядра на своей Windows 10, перезагрузил компьютер и запустил WinDbg от имени администратора. При выполнении отладки ядра (File -> Kernel Debug …) я не уверен, что вводить в lkd> приглашение для разборки кода. Я могу сделать «! db FFFFFFF0», который отображает несколько байтов:
#fffffff0 90 90 e9 83 e8 00 00 00-fc 00 00 00 00 00 e1 ff ................
#100000000 bb 00 fc 6a 00 00 e1 a9-00 00 bb 00 fc 6a 00 00 ...j.........j..
#100000010 01 aa 00 00 bb 00 fc 6a-00 00 21 aa 00 00 bb 00 .......j..!.....
#100000020 fc 6a 00 00 41 aa 00 00-bb 00 fc 6a 00 00 61 aa .j..A......j..a.
#100000030 00 00 bb 00 fc 6a 00 00-81 aa 00 00 bb 00 fc 6a .....j.........j
#100000040 00 00 a1 aa 00 00 bb 00-fc 6a 00 00 c1 aa 00 00 .........j......
#100000050 bb 00 fc 6a 00 00 e1 aa-00 00 bb 00 fc 6a 00 00 ...j.........j..
#100000060 01 ab 00 00 bb 00 fc 6a-00 00 21 ab 00 00 bb 00 .......j..!.....
затем я попробовал «! u FFFFFFF0», который возвращает:
Op:
Dest:
Dest: 0
Src:
Srct: 0
Ответ №1:
это всего лишь два nop и переход, если вы имеете в виду, что вам нужно разобрать его как 16 бит
используйте ur
я исправил первые 16 байтов из вашего запроса и разобрал его как 16 бит для демонстрации ниже
0:000> db . l10
772805a6 90 90 e9 83 e8 00 00 00-fc 00 00 00 00 00 e1 ff ................
0:000> ur . l3
ntdll!LdrpDoDebuggerBreak 0x2c:
772805a6 90 nop
772805a7 90 nop
772805a8 e983e8 jmp EE2E
0:000>
Локальная отладка ядра не работает, это мертвая отладка, она работает на мгновенном снимке
livekd работает в состоянии, в котором система была при сбросе
!u является недокументированным iirc и не разбирается, он предоставляет подробные сведения об одной инструкции
0:000> u . 1 l1
ntdll!LdrpDoDebuggerBreak 0x2d:
772805a7 8975fc mov dword ptr [ebp-4],esi
0:000> !u 772805a7
Op: mov
Dest: esi
Dest: fffffffe
Src: dword ptr [ebp-4]
Srct: 0
0:000>
если вы ищете разборку чего-то вроде кода bios, используйте
unassemble physical
kd> up cs:7c00 l1
0008:00007c00 eb52 jmp 00007c54
kd> up cs:7c54 l20
0008:00007c54 fa cli
0008:00007c55 33c0 xor eax,eax
0008:00007c57 8ed0 mov ss,ax
0008:00007c59 bc007cfb68 mov esp,68FB7C00h
0008:00007c5e c0071f rol byte ptr [edi],1Fh
0008:00007c61 1e push ds
0008:00007c62 686600cb88 push 88CB0066h
0008:00007c67 16 push ss
0008:00007c68 0e push cs
0008:00007c69 006681 add byte ptr [esi-7Fh],ah
0008:00007c6c 3e0300 add eax,dword ptr ds:[eax]
0008:00007c6f 4e dec esi
0008:00007c70 54 push esp
0008:00007c71 46 inc esi
0008:00007c72 53 push ebx
0008:00007c73 7515 jne 00007c8a
0008:00007c75 b441 mov ah,41h
0008:00007c77 bbaa55cd13 mov ebx,13CD55AAh
0008:00007c7c 720c jb 00007c8a
0008:00007c7e 81fb55aa7506 cmp ebx,675AA55h
0008:00007c84 f7c101007503 test ecx,3750001h
0008:00007c8a e9dd001e83 jmp 831e7d6c
я не думаю, что debug.com поставляется в Windows 10 x64, если вы можете получить свои руки на win732bit и т. Д., Вы можете использовать debug для разборки адреса
:>debug
-u f000:fff0 l1
F000:FFF0 EA5BE000F0 JMP F000:E05B
-u f000:e05b l1
F000:E05B EA3D3A00F0 JMP F000:3A3D
-u f000:3a3d l1
F000:3A3D FA CLI
-u f000:3a3d
F000:3A3D FA CLI
F000:3A3E B800F0 MOV AX,F000
F000:3A41 8ED0 MOV SS,AX
F000:3A43 BC493A MOV SP,3A49
F000:3A46 E93A8E JMP C883
F000:3A49 4B DEC BX
F000:3A4A 3ABB1DF1 CMP BH,[BP DI F11D]
F000:3A4E 2E CS:
F000:3A4F F747020800 TEST WORD PTR [BX 02],0008
F000:3A54 740E JZ 3A64
F000:3A56 32C0 XOR AL,AL
F000:3A58 BC5E3A MOV SP,3A5E
F000:3A5B E9E50B JMP 4643
-
Я не думаю, что вы можете изменить или разобрать физический адрес f000: ffff в windbg.
Я не думаю, что он вообще отображается
Я видел ваш пост! db, показывающий вывод, поэтому я не был уверен, доступен ли он в x64.
afaik эти коды выполняются в реальном режиме, и вы не можете получить к ним доступ в защищенном режиме с помощью программного отладчика, такого как windbg
в любом случае вернемся к сути
, если вы хотите перейти через вектор сброса в MBR, используйте аппаратный эмулятор, такой как bochs.
установите bochs (последняя версия 2.6.11 x64 на момент редактирования) с демонстрацией dlx
если вы установили bochs в Windows 10, вам может потребоваться предоставить разрешения для папки bochs
(щелкните правой кнопкой мыши папку bochs-> свойства-> безопасность-> редактировать полностью или записать в зависимости от обстоятельств)
после получения разрешения вы можете дважды щелкнуть run.bat, и вы должны попасть в приглашение загрузки LILo
если вы здесь, закройте boch
, откройте командную строку с повышенными
правами и выполните ../bochsdbg -f bochsrc
он остановится при сбросе вектора
C:Program FilesBochs-2.6.11dlxlinux>..bochsdbg.exe -f ./bochsrc.bxrc
========================================================================
Bochs x86 Emulator 2.6.11
Built from SVN snapshot on January 5, 2020
Timestamp: Sun Jan 5 08:36:00 CET 2020
========================================================================
00000000000i[ ] reading configuration from ./bochsrc.bxrc
00000000000i[ ] installing win32 module as the Bochs GUI
00000000000i[ ] using log file bochsout.txt
Next at t=0
(0) [0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0
установите точку останова на 0x7c00, используя lb 0x7c00 (ЗАПУСК MBR)
используйте s или n для пошагового выполнения
если вы выполняете один шаг, используя s, вам может потребоваться нажать s or ENTER
42,5 миллиона раз, чтобы достичь MBR
вот пошаговый переход от вектора сброса к MBR с помощью n или next
<bochs:5> blist
Num Type Disp Enb Address
1 lbreakpoint keep y 0x0000000000007c00
<bochs:6> u
00000000fffffff0: ( ): jmpf 0xf000:e05b ; ea5be000f0
<bochs:7> n
Next at t=1
(0) [0x0000000fe05b] f000:e05b (unk. ctxt): xor ax, ax ; 31c0
<bochs:8>
Next at t=2
(0) [0x0000000fe05d] f000:e05d (unk. ctxt): out 0x0d, al ; e60d
<bochs:9>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cut off
Next at t=32
(0) [0x0000000fe0c4] f000:e0c4 (unk. ctxt): rep stosw word ptr es:[di], ax ; f3ab
<bochs:39>
Next at t=160
(0) [0x0000000fe0c6] f000:e0c6 (unk. ctxt): call . 13763 (0x000f168c) ; e8c335
<bochs:40>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cut off
Next at t=5078
(0) [0x0000000fe0cf] f000:e0cf (unk. ctxt): mov word ptr ds:0x0413, ax ; a31304
<bochs:43>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cut off
Next at t=330285
(0) [0x0000000fe1f5] f000:e1f5 (unk. ctxt): call .-18344 (0x000f9a50) ; e858b8
<bochs:146>
Next at t=1403926
(0) [0x0000000fe1f8] f000:e1f8 (unk. ctxt): mov cx, 0xc000 ; b900c0
<bochs:147>
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cut off
Next at t=1877324
(0) [0x0000000fe21e] f000:e21e (unk. ctxt): call . 14565 (0x000f1b06) ; e8e538
<bochs:161>
Next at t=5333736
(0) [0x0000000fe221] f000:e221 (unk. ctxt): call . 21186 (0x000f34e6) ; e8c252
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx cut off
(0) [0x0000000fe230] f000:e230 (unk. ctxt): call . 12532 (0x000f1327) ; e8f430
<bochs:167>
Next at t=42311959
(0) [0x0000000fe233] f000:e233 (unk. ctxt): sti ; fb
<bochs:168>
Next at t=42311960
(0) [0x0000000fe234] f000:e234 (unk. ctxt): int 0x19 ; cd19
<bochs:169>
(0) Breakpoint 1, 0x0000000000007c00 in ?? () <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Next at t=42409977 <<<<< 42.5 million instructions until MBR is reached
(0) [0x000000007c00] 0000:7c00 (unk. ctxt): cli ; fa
<bochs:170> q
(0).[42409977] [0x000000007c00] 0000:7c00 (unk. ctxt): cli ; fa
Bochs is exiting. Press ENTER when you're ready to close this window.
Комментарии:
1. Я пробовал «up FFFF0000 FFF0 l1» в livekd64, но я получаю сообщение «Ошибка доступа к памяти в «up FFFF0000 FFF0 l1».
2. Я отредактировал ответ, который я не думаю, что вы можете разобрать по этому адресу в программном отладчике. посмотрите на редактирование для обходного пути
3. Спасибо @blabb, я знаю о программных эмуляторах, но я действительно хочу увидеть код моей физической машины. Тем временем я нашел курс о BIOS. Кажется, есть регистр для записи, чтобы сопоставить BIOS с адресным пространством процессора. opensecuritytraining.info/IntroBIOS.html