-
Notifications
You must be signed in to change notification settings - Fork 1
/
canard.debug.gdb
87 lines (73 loc) · 1.5 KB
/
canard.debug.gdb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# Canard bootstrap debugging script.
# GDB definitions to make it easier to debug the main image.
break *0x4001f5
run
define s
ni
print_status
end
define bp
break *0x400$arg0
end
define xb
printf "length: "
x/wx $arg0
printf "position: "
x/wx ($arg0 + 4)
printf "upper: "
x/wx ($arg0 + 8)
printf "contents: "
x/20sb ($arg0 + 12)
end
define xs
print "length: "
x/hx $arg0
print "contents: "
x/10sb ($arg0 + 2)
end
define print_status
print_data_stack
print_return_stack
print_heap
printf "%c[1;32m%%rx = %lx, %lx, %lx, %lx\n", 27, $rax, $rbx, $rcx, $rdx
printf "%c[1;32minstruction queue%c[1;30m\n", 27, 27
x/8i $pc
printf "%c[0;0m", 27
end
# Stack inspectors.
# Print the top few items on any given stack. Generally, all stack items will be
# pointers, so dereference those.
define print_data_stack
printf "%c[1;32mdata stack%c[1;30m: %lx\n", 27, 27, $rdi
set $x = $rdi
set $lower = 0x400000 + *0x400060
while $x > $lower
set $x = $x - 8
print_cell $x
end
end
define print_return_stack
printf "%c[1;32mreturn stack%c[1;30m: %lx\n", 27, 27, $rsp
set $x = $rsp
set $__ = 16
while (unsigned long long) $__ >> 3
x/xg $x
set $x = $x + 8
end
end
define print_heap
printf "%c[1;32mheap%c[1;30m: %lx\n", 27, 27, $rsi
set $count = 0
x/i $rsi
while $_ < 0x4fffff && $count < 10
x/i
set $count = $count + 1
end
end
define print_cell
x/xg $arg0
if $__ >= 0x400000 && $__ < 0x500000
x/i $__
end
end
# Generated by SDoc