Spaces:
Runtime error
Runtime error
| # 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 | |