v86 / tests /nasm /gdb-extract-def
peterpeter8585's picture
Upload 553 files
8df6da4 verified
# 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.
set $top = $fstat >> 11 & 7
if ($ftag >> (2 * (($top + 0) & 7)) & 3) != 2
printf " %.100e,\n", $st0
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 1) & 7)) & 3) != 2
printf " %.100e,\n", $st1
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 2) & 7)) & 3) != 2
printf " %.100e,\n", $st2
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 3) & 7)) & 3) != 2
printf " %.100e,\n", $st3
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 4) & 7)) & 3) != 2
printf " %.100e,\n", $st4
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 5) & 7)) & 3) != 2
printf " %.100e,\n", $st5
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 6) & 7)) & 3) != 2
printf " %.100e,\n", $st6
else
printf " \"invalid\",\n"
end
if ($ftag >> (2 * (($top + 7) & 7)) & 3) != 2
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