4 (| (& 0x00000000000000ff (>> n 56))
5 (& 0x000000000000ff00 (>> n 40))
6 (& 0x0000000000ff0000 (>> n 24))
7 (& 0x00000000ff000000 (>> n 8))
8 (& 0x000000ff00000000 (<< n 8))
9 (& 0x0000ff0000000000 (<< n 24))
10 (& 0x00ff000000000000 (<< n 40))
11 (& 0xff00000000000000 (<< n 56))))
14 (printf "AX %016x BX %016x CX %016x DX %016x\n"
16 (printf "SI %016x DI %016x BP %016x SP %016x\n"
18 (printf "R8 %016x R9 %016x R0 %016x R1 %016x\n"
20 (printf "R2 %016x R3 %016x R4 %016x R5 %016x\n"
22 (printf "IP %016x FLAGS %016x\n"
24 (printf "CS %04x DS %04x ES %04x FS %04x GS %04x SS %04x\n"
26 (printf "CR0 %016x CR2 %016x CR3 %016x\n"
28 (printf "CR4 %016x CR8 %016x EFER %016x\n\n"
33 (printf "\n======================================================\n"))
36 (printf "In the loader (%s)! (%016x)\n"
37 PROBENAME (getguest 0x8000))
40 ;(definteger vesa-addr)
43 ; careful - esx4x requires 3-4 args, but ws65 requires 2-3 for get*str.
44 ;(defun set-vesa-str ()
45 ; (getgueststr vesa-str (| (>> (& vesa-addr 0xffff0000) 12)
46 ; (getgueststr vesa-str 255 (| (>> (& vesa-addr 0xffff0000) 12)
47 ; (& vesa-addr 0xffff))))
49 ;(defun vesa-modes (max off)
51 ; (do (setint vesa-addr (& 0xffff (getguest "VideoModeList" off)))
52 ; (printf " 0x%04x (%d)\n" vesa-addr vesa-addr)
53 ; (vesa-modes (- max 1) (+ off 2))))))
56 ; (printf "VbeSignature: 0x%08x\n"
57 ; (& 0xffffffff (getguest "VbeSignature")))
58 ; (printf "VbeVersion: 0x%04x\n"
59 ; (& 0xffff (getguest "VbeVersion")))
60 ; (setint vesa-addr (& 0xffffffff (getguest "OemStringPtr")))
62 ; (printf "OemStringPtr: 0x%08x (%s)\n"
64 ; (printf "Capabilities: 0x%08x\n"
65 ; (& 0xffffffff (getguest "Capabilities")))
66 ; (printf "VideoModePtr: 0x%08x\n"
67 ; (& 0xffffffff (getguest "VideoModePtr")))
68 ; (setint vesa-addr (& 0xffff (getguest "TotalMemory")))
69 ; (printf "TotalMemory: 0x%04x (%dkB)\n"
70 ; vesa-addr (* 64 vesa-addr))
71 ; (printf "OemSoftwareRev: 0x%04x\n"
72 ; (& 0xffff (getguest "OemSoftwareRev")))
73 ; (setint vesa-addr (& 0xffffffff (getguest "OemVendorNamePtr")))
75 ; (printf "OemVendorNamePtr 0x%08x (%s)\n"
77 ; (setint vesa-addr (& 0xffffffff (getguest "OemProductNamePtr")))
79 ; (printf "OemProductNamePtr: 0x%08x (%s)\n"
81 ; (setint vesa-addr (& 0xffffffff (getguest "OemProductRevPtr")))
83 ; (printf "OemProductRevPtr: 0x%08x (%s)\n\n"
84 ; vesa-addr vesa-str))
87 ;(defun dump-mode-info (o)
89 ; (do (printf " %3d: %016x %016x\n"
91 ; (rev (getguest "VESAModeInfo" o))
92 ; (rev (getguest "VESAModeInfo" (+ o 8))))
93 ; (dump-mode-info (+ o 16))))))
95 ;(defun dump-edid-info (o)
97 ; (do (printf " %3d: %016x %016x\n"
99 ; (rev (getguest "EDIDBlock" o))
100 ; (rev (getguest "EDIDBlock" (+ o 8))))
101 ; (dump-edid-info (+ o 16))))))
104 ;(vprobe GUEST:HaveVESA
105 ; (printf "VESA Info:\n")
111 ;(definteger vesa-scratch)
113 ; (printf "vesa (%s)\n" PROBENAME)
114 ; (setint vesa-scratch (getguest "VideoModeList"))
115 ; (printf " VideoModeList:\n %016x" (rev vesa-scratch))
116 ; (setint vesa-scratch (getguest "VideoModeList" 8))
117 ; (printf " %016x\n" (rev vesa-scratch))
118 ; (printf " VESAModeInfo:\n")
121 ;(definteger mp-scratch)
122 ;(vprobe GUEST:HaveMPConfig
123 ; (printf "HaveMPConfig\n")
124 ; (setint mp-scratch (& 0xffffffff (getguest "MPFloatingPointer")))
125 ; (printf " %016x\n" (rev (getguest mp-scratch)))
126 ; (printf " %016x\n" (rev (getguest (+ mp-scratch 8))))
133 (printf "(%dkiB)" (/ m 1024)))
135 (printf "(%dMiB)" (/ m 1048576)))))
150 (definteger smap-base)
151 (definteger smap-length)
152 (definteger smap-type)
154 (defun e820-entry (n)
155 (setint smap-base (getguest "e820_map" (* n 20)))
156 (setint smap-length (getguest "e820_map" (+ (* n 20) 8)))
157 (setint smap-type (& (getguest "e820_map" (+ (* n 20) 16)) 0xffffffff))
159 (printf "E820 %2d: 0x%016x - 0x%016x %s - "
160 n smap-base (+ smap-base smap-length)
161 (mem-type smap-type))
164 (cond ((< n (getguest "e820_entries"))
165 (e820-entry (+ n 1)))))
173 (printf " %016x\n" (getguest 0x1f00))
174 (printf " %016x\n" (getguest 0x1f08))
175 (printf " %016x\n" (getguest 0x1f10))
176 (printf " %016x\n" (getguest 0x1f18))
177 (printf " %016x\n" (getguest 0x1f20))
178 (printf " %016x\n" (getguest 0x1f28)))
181 (vprobe GUEST:RealModeFlamingDeath
182 (printf "Real mode flaming death\n")
186 (printf "Boot sector called die!!!!\n")
189 ;(vprobe GUEST:DisplayKeycode
190 ; (printf "DisplayKeycode (%s)\n keys %016x\n keyp %016x\n"
191 ; PROBENAME (rev (getguest "keys")) (getguest "keyp")))
192 ;(vprobe GUEST:UpdateClock
193 ; (printf "UpdateClock (%s)\n" PROBENAME)
194 ; (printf " ==> TOD: %016x\n" (rev (getguest "tod")))
198 ;(vprobe GUEST:PrintMessage
199 ; (printf "PrintMessage\n")
200 ; (printf "PrintMessage\n 0x%016x\n 0x%016x\n 0x%016x\n 0x%016x\n"
201 ; (getguest (+ RSP 24))
202 ; (getguest (+ RSP 16))
203 ; (getguest (+ RSP 8))
205 ; (printf " frameBuffer: %016x\n frameBufferSize: %016x\n"
206 ; (getguest "frameBuffer") (getguest "frameBufferSize"))
210 (printf "Made it here (%s)\n" PROBENAME)
214 (vprobe GUEST:IntoProtectedMode
215 (printf "IntoProtectedMode (%s)\n" PROBENAME)
220 (vprobe GUEST:IntoLongMode
221 (printf "IntoLongMode (%s)\n" PROBENAME)
227 (printf "mapped (%s)\n" PROBENAME)
230 (definteger pciAddress)
232 (vprobe GUEST:HavePCI
233 (setint pciAddress (getguest "pciAddress"))
234 (setint pciData (getguest "pciData"))
235 (printf "PCI: %02x:%02x.%1x %04x:%04x\n"
236 (& (>> pciAddress 16) 0xff) (& (>> pciAddress 11) 0x1f)
237 (& (>> pciAddress 8) 0x7)
238 (& pciData 0xffff) (& (>> pciData 16) 0xffff)))
242 (defun dump-irq-routing-table (t o l)
244 (do (setint tmp (getguest (+ t o)))
245 (printf " %016x\n" tmp)
246 (dump-irq-routing-table t (+ o 16) l)))))
250 (vprobe GUEST:RouteIRQ
251 (setint table (getguest "routingTable"))
252 (setint tb (>> (getguest table) 48))
253 (printf "IRQ Routing (table at %x):\n" table)
255 (dump-irq-routing-table table 0 tb))))
258 ;(vprobe GUEST:VideoInit (printf "VideoInit: (%s)\n" PROBENAME)(dump-regs))
259 ;(vprobe GUEST:MapIORegion (printf "MapIORegion: (%s)\n" PROBENAME)(dump-regs))
265 (printf "test (%s)!\n tval = 0x%016x\n tval2 = 0x%016x\n"
266 PROBENAME (getguest "tval") (getguest "tval2")))
270 ; (printf " bitmap[0]: %016x\n bitmap[8]: %016x\n"
271 ; (rev (getguest 0x18000))(rev (getguest 0x18008)))
275 (defun dump-pt (addr)
276 (printf "Walking page tables for faulting address %016x\n" addr)
277 (setint pts (getguest (+ (& CR3 0xfffffffffffff000)
278 (* 8 (& (>> addr 39) 0x1ff)))))
279 (printf " => PML4E: %016x\n" pts)
280 (setint pts (getguest (+ (& pts 0x000ffffffffff000)
281 (* 8 (& (>> addr 30) 0x1ff)))))
282 (printf " => PDPE: %016x\n" pts)
283 (setint pts (getguest (+ (& pts 0x000ffffffffff000)
284 (* 8 (& (>> addr 21) 0x1ff)))))
285 (printf " => PDE: %016x\n" pts)
286 (setint pts (getguest (+ (& pts 0x000ffffffffff000)
287 (* 8 (& (>> addr 12) 0x1ff)))))
288 (printf " => PTE: %016x\n" pts))
290 ;(defun print-idt (v)
291 ; (printf " %3d: 0x%016x%016x\n"
293 ; (getguest (+ 0x1008 (* v 16)))
294 ; (getguest (+ 0x1000 (* v 16))))
296 ; (print-idt (- v 1)))))
297 ;(vprobe GUEST:IDTDone
298 ; (printf "IDTDone (%s)\n" PROBENAME)
303 ; (printf " PTE %x: 0x%016x\n"
304 ; n (getguest (+ 0x5000 (* 8 n))))
308 ;(vprobe GUEST:PageDone
309 ; (printf "PageDone (%s)\n (limit: %08x)\n"
310 ; PROBENAME (& 0xffffffff (getguest "e820_map" 8)))
311 ; (printf " PML4E: 0x%016x\n PDPTE: 0x%016x\n PDE: 0x%016x\n"
319 ; (printf "foo (%s): 0x%08x:0x%08x\n" PROBENAME
320 ; (& 0xffffffff (getguest RSP))
321 ; (& 0xffffffff (getguest (+ RSP 4))))
322 ; (printf "GDT: 00: %016x\n 08: %016x\n 10: %016x\n 18: %016x\n"
329 ;(vprobe GUEST_WRITE:0x1f10
330 ; (printf "GUEST_WRITE:0x1f10: %s\n" PROBENAME)
334 ;(defun dump-tss (off)
335 ; (printf " TSS+%2x: %016x\n" off (getguest "tss_start" off))
337 ; (dump-tss (- off 8)))))
339 ;(vprobe GUEST:EndPopTSS
340 ; (printf "EndPopTSS (%s), TSS:\n" PROBENAME)
345 ;(vprobe GUEST:PopulateTSS
346 ; (printf "PopulateTSS: (%s)\nPhysmem bitmask:\n" PROBENAME)
347 ; (printf " %016x\n" (rev (getguest
349 ;(defun dump-cpuid-fun (current max struct)
350 ; (printf " %02x: %08x %08x %08x %08x\n" current
351 ; (& 0xffffffff (getguest struct))
352 ; (& 0xffffffff (getguest (+ struct 4)))
353 ; (& 0xffffffff (getguest (+ struct 8)))
354 ; (& 0xffffffff (getguest (+ struct 12))))
355 ; (cond ((< current (- max 1))
356 ; (dump-cpuid-fun (+ current 1) max (+ struct 16)))))
358 ;(definteger cpuid-struct)
359 ;(definteger cpuid-max)
360 ;(definteger cpuid-base)
361 ;(defun dump-cpuid ()
362 ; (setint cpuid-struct (getguest "CPUIDInfo"))
365 ; (setint cpuid-max (getguest cpuid-struct))
366 ; (setint cpuid-base (+ cpuid-struct 24))
368 ; (printf " CPUID Info for functions 0 (entries %x)\n" cpuid-max)
369 ; (cond ((> cpuid-max 0)
370 ; (dump-cpuid-fun 0 cpuid-max cpuid-base)))
372 ; (setint cpuid-base (+ cpuid-base (* cpuid-max 16)))
375 ; (setint cpuid-max (getguest (+ cpuid-struct 8)))
376 ; (cond ((> cpuid-max 0)
377 ; (do (printf " CPUID Info for functions 4 (entries %x)\n"
379 ; (dump-cpuid-fun 0 cpuid-max cpuid-base))))
381 ; (setint cpuid-base (+ cpuid-base (* cpuid-max 16)))
384 ; (setint cpuid-max (getguest (+ cpuid-struct 16)))
385 ; (printf " CPUID Info for functions 8 (entries %x)\n" cpuid-max)
386 ; (cond ((> cpuid-max 0)
387 ; (dump-cpuid-fun 0 cpuid-max cpuid-base))))
389 ;(vprobe GUEST:CPUFeaturesDone
390 ; (printf "CPUFeaturesDone (%s)\n" PROBENAME)
393 (defun dump-stack (off)
394 (printf " %4x(%%rsp): %016x\n" off (getguest (+ RSP off)))
396 (dump-stack (- off 8)))))
398 (vprobe GUEST:Fatal64
399 (printf "Fatal64!\n")
401 (cond (CR2 (dump-pt CR2)))
406 (printf "Badness (%s): code = 0x%08x!\n faulting insn = %016x\n %s\n"
407 PROBENAME a (rev (getguest RIP)) stk)
412 (vprobe GUEST:HandlePF
413 (printf "HandlePF (%s)\n" PROBENAME)
415 (cond (CR2 (dump-pt CR2)))
418 (vprobe Guest_UD (badness ARG0))
419 (vprobe Guest_TS (badness ARG0))
420 (vprobe Guest_DF (badness ARG0))
421 (vprobe Guest_SS (badness ARG0))
422 (vprobe Guest_GP (badness ARG0))
423 (vprobe Guest_PF (badness ARG0))
424 (vprobe Guest_TripleFault (badness 0))
428 ; (cond ((== ARG0 0x2c)
429 ; (aggr mouse (1) () 1))))
436 ; (cond ((!= ARG0 0x20)
437 ; (do (printf "%s: tick (0x%x)\n" PROBENAME ARG0)
442 ; (aggr rip (RIP) () 1))
447 ;(vprobe GUEST:LBA2CHS (printf "%s:\n" PROBENAME)(dump-regs))
448 ;(vprobe GUEST:LBA2CHS_Done (printf "%s:\n" PROBENAME)(dump-regs))
451 ;(definteger dbt-addr)
458 ; (setint dbt-addr (| (& 0xfffff (<< ES 4)) (& 0xffff RDI)))
459 ; (setint dbt (getguest dbt-addr))
460 ; (printf "Disk Base Table (0x%08x)\n" dbt-addr)
461 ; (printf "00: %02x\n" (byte dbt 0))
462 ; (printf "01: %02x\n" (byte dbt 1))
463 ; (printf "02: %02x\n" (byte dbt 2))
464 ; (printf "03: %02x\n" (byte dbt 3))
465 ; (printf "04: %02x\n" (byte dbt 4))
466 ; (printf "05: %02x\n" (byte dbt 5))
467 ; (printf "06: %02x\n" (byte dbt 6))
468 ; (printf "07: %02x\n" (byte dbt 7))
469 ; (setint dbt (getguest (+ dbt-addr 8)))
470 ; (printf "08: %02x\n" (byte dbt 0))
471 ; (printf "09: %02x\n" (byte dbt 1))
472 ; (printf "0a: %02x\n" (byte dbt 2)))
474 ;(vprobe GUEST:_HaveParams