146 lines
4 KiB
Plaintext
146 lines
4 KiB
Plaintext
# Invocation: gdb -x gdb-extract-def
|
|
|
|
# extract-state /path/to/foo.bin /path/to/foo.fixture
|
|
define extract-state
|
|
file $arg0
|
|
|
|
# Disables logging to stdout - only log to file
|
|
set logging redirect on
|
|
|
|
set logging file $arg1
|
|
set logging overwrite on
|
|
set logging on
|
|
|
|
run
|
|
|
|
printf "---BEGIN JSON---\n"
|
|
printf "[\n"
|
|
printf " %d,\n", $eax
|
|
printf " %d,\n", $ecx
|
|
printf " %d,\n", $edx
|
|
printf " %d,\n", $ebx
|
|
printf " %d,\n", $esp
|
|
printf " %d,\n", $ebp
|
|
printf " %d,\n", $esi
|
|
printf " %d,\n", $edi
|
|
printf "\n"
|
|
|
|
printf " %d,\n", $eip
|
|
printf "\n"
|
|
|
|
# For fpu registers, check the tag register first. If the tag index is
|
|
# invalid and you try to access to corresponding register, gdb exits with an
|
|
# error.
|
|
if ($ftag & (3 << 0)) != (2 << 0)
|
|
printf " %.100e,\n", $st0
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 2)) != (2 << 2)
|
|
printf " %.100e,\n", $st1
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 4)) != (2 << 4)
|
|
printf " %.100e,\n", $st2
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 6)) != (2 << 6)
|
|
printf " %.100e,\n", $st3
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 8)) != (2 << 8)
|
|
printf " %.100e,\n", $st4
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 10)) != (2 << 10)
|
|
printf " %.100e,\n", $st5
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 12)) != (2 << 12)
|
|
printf " %.100e,\n", $st6
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
if ($ftag & (3 << 14)) != (2 << 14)
|
|
printf " %.100e,\n", $st7
|
|
else
|
|
printf " \"invalid\",\n"
|
|
end
|
|
printf "\n"
|
|
|
|
printf " %d,\n", $mm0.v2_int32[0]
|
|
printf " %d,\n", $mm0.v2_int32[1]
|
|
printf " %d,\n", $mm1.v2_int32[0]
|
|
printf " %d,\n", $mm1.v2_int32[1]
|
|
printf " %d,\n", $mm2.v2_int32[0]
|
|
printf " %d,\n", $mm2.v2_int32[1]
|
|
printf " %d,\n", $mm3.v2_int32[0]
|
|
printf " %d,\n", $mm3.v2_int32[1]
|
|
printf " %d,\n", $mm4.v2_int32[0]
|
|
printf " %d,\n", $mm4.v2_int32[1]
|
|
printf " %d,\n", $mm5.v2_int32[0]
|
|
printf " %d,\n", $mm5.v2_int32[1]
|
|
printf " %d,\n", $mm6.v2_int32[0]
|
|
printf " %d,\n", $mm6.v2_int32[1]
|
|
printf " %d,\n", $mm7.v2_int32[0]
|
|
printf " %d,\n", $mm7.v2_int32[1]
|
|
printf "\n"
|
|
|
|
printf " %d,\n", $xmm0.v4_int32[0]
|
|
printf " %d,\n", $xmm0.v4_int32[1]
|
|
printf " %d,\n", $xmm0.v4_int32[2]
|
|
printf " %d,\n", $xmm0.v4_int32[3]
|
|
printf " %d,\n", $xmm1.v4_int32[0]
|
|
printf " %d,\n", $xmm1.v4_int32[1]
|
|
printf " %d,\n", $xmm1.v4_int32[2]
|
|
printf " %d,\n", $xmm1.v4_int32[3]
|
|
printf " %d,\n", $xmm2.v4_int32[0]
|
|
printf " %d,\n", $xmm2.v4_int32[1]
|
|
printf " %d,\n", $xmm2.v4_int32[2]
|
|
printf " %d,\n", $xmm2.v4_int32[3]
|
|
printf " %d,\n", $xmm3.v4_int32[0]
|
|
printf " %d,\n", $xmm3.v4_int32[1]
|
|
printf " %d,\n", $xmm3.v4_int32[2]
|
|
printf " %d,\n", $xmm3.v4_int32[3]
|
|
printf " %d,\n", $xmm4.v4_int32[0]
|
|
printf " %d,\n", $xmm4.v4_int32[1]
|
|
printf " %d,\n", $xmm4.v4_int32[2]
|
|
printf " %d,\n", $xmm4.v4_int32[3]
|
|
printf " %d,\n", $xmm5.v4_int32[0]
|
|
printf " %d,\n", $xmm5.v4_int32[1]
|
|
printf " %d,\n", $xmm5.v4_int32[2]
|
|
printf " %d,\n", $xmm5.v4_int32[3]
|
|
printf " %d,\n", $xmm6.v4_int32[0]
|
|
printf " %d,\n", $xmm6.v4_int32[1]
|
|
printf " %d,\n", $xmm6.v4_int32[2]
|
|
printf " %d,\n", $xmm6.v4_int32[3]
|
|
printf " %d,\n", $xmm7.v4_int32[0]
|
|
printf " %d,\n", $xmm7.v4_int32[1]
|
|
printf " %d,\n", $xmm7.v4_int32[2]
|
|
printf " %d,\n", $xmm7.v4_int32[3]
|
|
printf "\n"
|
|
|
|
|
|
set $addr=0x100000
|
|
while($addr < 0x102000)
|
|
printf " %d, %d, %d, %d, %d, %d, %d, %d,\n", *(int*)($addr+0), *(int*)($addr+4), *(int*)($addr+8), *(int*)($addr+12), *(int*)($addr+16), *(int*)($addr+20), *(int*)($addr+24), *(int*)($addr+28)
|
|
set $addr=$addr+32
|
|
end
|
|
printf "\n"
|
|
|
|
printf " %d,\n", $eflags
|
|
printf " %d,\n", $ftag
|
|
printf " %d\n", $fstat
|
|
|
|
printf "]\n"
|
|
printf "---END JSON---\n"
|
|
|
|
set logging off
|
|
|
|
end
|