Files
retrobsd/src/cmd/adb/doc/adb-figures.txt
2014-04-09 14:27:18 +01:00

528 lines
13 KiB
Plaintext

=== Figure 1: C program with pointer bug ===
<code c>
struct buf {
int fildes;
int nleft;
char *nextp;
char buff[512];
}bb;
struct buf *obuf;
char *charp "this is a sentence.";
main(argc,argv)
int argc;
char **argv;
{
char cc;
if(argc < 2) {
printf("Input file missing\n");
exit(8);
}
if((fcreat(argv[1],obuf)) < 0){
printf("%s : not found\n", argv[1]);
exit(8);
}
charp = 'T';
printf("debug 1 %s\n",charp);
while(cc= *charp++)
putc(cc,obuf);
fflush(obuf);
}
</code>
=== Figure 2: ADB output for C program of Figure 1 ===
**adb a.out core**
**$c**
~main(02,0177762)
**$C**
~main(02,0177762)
argc: 02
argv: 0177762
cc: 02124
**$r**
ps 0170010
pc 0204 ~main+0152
sp 0177740
r5 0177752
r4 01
r3 0
r2 0
r1 0
r0 0124
~main+0152: mov _obuf,(sp)
**$e**
savr5: 0
_obuf: 0
_charp: 0124
_errno: 0
_fout: 0
**$m**
text map `ex1'
b1 = 0 e1 = 02360 f1 = 020
b2 = 0 e2 = 02360 f2 = 020
data map `core1'
b1 = 0 e1 = 03500 f1 = 02000
b2 = 0175400 e2 = 0200000 f2 = 05500
***charp/s**
0124: TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTLxNh@x&_
~
**charp/s**
_charp: T
_charp+02: this is a sentence.
_charp+026: Input file missing
**main.argc/d**
0177756: 2
***main.argv/3o**
0177762: 0177770 0177776 0177777
**0177770/s**
0177770: a.out
***main.argv/3o**
0177762: 0177770 0177776 0177777
***"/s**
0177770: a.out
**.=o**
0177770
**.-10/d**
0177756: 2
**$q**
=== Figure 3: Multiple function C program for stack trace ===
<code c>
int fcnt,gcnt,hcnt;
h(x,y)
{
int hi; register int hr;
hi = x+1;
hr = x-y+1;
hcnt++ ;
hj:
f(hr,hi);
}
g(p,q)
{
int gi; register int gr;
gi = q-p;
gr = q-p+1;
gcnt++ ;
gj:
h(gr,gi);
}
f(a,b)
{
int fi; register int fr;
fi = a+2*b;
fr = a+b;
fcnt++ ;
fj:
g(fr,fi);
}
main()
{
f(1,1);
}
</code>
=== Figure 4: ADB output for C program of Figure 3 ===
**adb**
**$c**
~h(04452,04451)
~g(04453,011124)
~f(02,04451)
~h(04450,04447)
~g(04451,011120)
~f(02,04447)
~h(04446,04445)
~g(04447,011114)
~f(02,04445)
~h(04444,04443)
**HIT DEL KEY**
adb
**,5$C**
~h(04452,04451)
x: 04452
y: 04451
hi: ?
~g(04453,011124)
p: 04453
q: 011124
gi: 04451
gr: ?
~f(02,04451)
a: 02
b: 04451
fi: 011124
fr: 04453
~h(04450,04447)
x: 04450
y: 04447
hi: 04451
hr: 02
~g(04451,011120)
p: 04451
q: 011120
gi: 04447
gr: 04450
**fcnt/d**
_fcnt: 1173
**gcnt/d**
_gcnt: 1173
**hcnt/d**
_hcnt: 1172
**h.x/d**
022004: 2346
**$q**
=== Figure 5: C program to decode tabs ===
<code c>
#define MAXLINE 80
#define YES 1
#define NO 0
#define TABSP 8
char input[] "data";
char ibuf[518];
int tabs[MAXLINE];
main()
{
int col, *ptab;
char c;
ptab = tabs;
settab(ptab); /*Set initial tab stops */
col = 1;
if(fopen(input,ibuf) < 0) {
printf("%s : not found\n",input);
exit(8);
}
while((c = getc(ibuf)) != -1) {
switch(c) {
case '\t': /* TAB */
while(tabpos(col) != YES) {
putchar(' '); /* put BLANK */
col++ ;
}
break;
case '\n': /*NEWLINE */
putchar('\n');
col = 1;
break;
default:
putchar(c);
col++ ;
}
}
}
/* Tabpos return YES if col is a tab stop */
tabpos(col)
int col;
{
if(col > MAXLINE)
return(YES);
else
return(tabs[col]);
}
/* Settab - Set initial tab stops */
settab(tabp)
int *tabp;
{
int i;
for(i = 0; i<= MAXLINE; i++)
(i%TABSP) ? (tabs[i] = NO) : (tabs[i] = YES);
}
</code>
=== Figure 6a: ADB output for C program of Figure 5 ===
**adb a.out -**
**settab+4:b**
**fopen+4:b**
**getc+4:b**
**tabpos+4:b**
**$b**
breakpoints
count bkpt command
1 ~tabpos+04
1 _getc+04
1 _fopen+04
1 ~settab+04
**settab,5?ia**
~settab: jsr r5,csv
~settab+04: tst -(sp)
~settab+06: clr 0177770(r5)
~settab+012: cmp $0120,0177770(r5)
~settab+020: blt ~settab+076
~settab+022:
**settab,5?i**
~settab: jsr r5,csv
tst -(sp)
clr 0177770(r5)
cmp $0120,0177770(r5)
blt ~settab+076
**:r**
a.out: running
breakpoint ~settab+04: tst -(sp)
**settab+4:d**
**:c**
a.out: running
breakpoint _fopen+04: mov 04(r5),nulstr+012
**$C**
_fopen(02302,02472)
~main(01,0177770)
col: 01
c: 0
ptab: 03500
**tabs,3/8o**
03500: 01 0 0 0 0 0 0 0
01 0 0 0 0 0 0 0
01 0 0 0 0 0 0 0
=== Figure 6b: ADB output for C program of Figure 5 ===
**:c**
a.out: running
breakpoint _getc+04: mov 04(r5),r1
**ibuf+6/20c**
__cleanu+0202: This is a test of
**:c**
a.out: running
breakpoint ~tabpos+04: cmp $0120,04(r5)
**tabpos+4:d**
**settab+4:b settab,5?ia**
**settab+4:b settab,5?ia; 0**
**getc+4,3:b main.c?C; 0**
**settab+4:b settab,5?ia; ptab/o; 0**
**$b**
breakpoints
count bkpt command
1 ~tabpos+04
3 _getc+04 main.c?C;0
1 _fopen+04
1 ~settab+04 settab,5?ia;ptab?o;0
~settab: jsr r5,csv
~settab+04: bpt
~settab+06: clr 0177770(r5)
~settab+012: cmp $0120,0177770(r5)
~settab+020: blt ~settab+076
~settab+022:
0177766: 0177770
0177744: @`
T0177744: T
h0177744: h
i0177744: i
s0177744: s
=== Figure 7: ADB output for C program with breakpoints ===
**adb ex3 -**
**h+4:b hcnt/d; h.hi/; h.hr/**
**g+4:b gcnt/d; g.gi/; g.gr/**
**f+4:b fcnt/d; f.fi/; f.fr/**
**:r**
ex3: running
_fcnt: 0
0177732: 214
symbol not found
**f+4:b fcnt/d; f.a/; f.b/; f.fi/**
**g+4:b gcnt/d; g.p/; g.q/; g.gi/**
**h+4:b hcnt/d; h.x/; h.y/; h.hi/**
**:c**
ex3: running
_fcnt: 0
0177746: 1
0177750: 1
0177732: 214
_gcnt: 0
0177726: 2
0177730: 3
0177712: 214
_hcnt: 0
0177706: 2
0177710: 1
0177672: 214
_fcnt: 1
0177666: 2
0177670: 3
0177652: 214
_gcnt: 1
0177646: 5
0177650: 8
0177632: 214
**HIT DEL**
**f+4:b fcnt/d; f.a/"a = "d; f.b/"b = "d; f.fi/"fi = "d**
**g+4:b gcnt/d; g.p/"p = "d; g.q/"q = "d; g.gi/"gi = "d**
**h+4:b hcnt/d; h.x/"x = "d; h.y/"h = "d; h.hi/"hi = "d**
**:r**
ex3: running
_fcnt: 0
0177746: a = 1
0177750: b = 1
0177732: fi = 214
_gcnt: 0
0177726: p = 2
0177730: q = 3
0177712: gi = 214
_hcnt: 0
0177706: x = 2
0177710: y = 1
0177672: hi = 214
_fcnt: 1
0177666: a = 2
0177670: b = 3
0177652: fi = 214
**HIT DEL**
**$q**
=== Figure 8: ADB address maps ===
<code>
a.out hdr text+data
|____|_____________________________|
0 D
core hdr text+data stack
|______|_____________________________......|________|
0 D S E
</code>
The following ''adb'' variables are set.
|| b || base of data || 0 ||
|| d || length of data || D ||
|| s || length of stack || S ||
|| t || length of text || 0 ||
=== Figure 9: ADB output for maps ===
**adb map core**
**$m**
text map `map'
b1 = 0 e1 = 0256 f1 = 020
b2 = 0 e2 = 0256 f2 = 020
data map `core'
b1 = 0 e1 = 0300 f1 = 02000
b2 = 0175400 e2 = 0200000 f2 = 02300
**$v**
variables
d = 0300
m = 0407
s = 02400
**$q**
=== Figure 10: Simple C program for illustrating formatting and patching ===
<code c>
char str1[] "This is a character string";
int one 1;
int number 456;
long lnum 1234;
float fpt 1.25;
char str2[] "This is the second character string";
main()
{
one = 2;
}
</code>
=== Figure 11: ADB output illustrating fancy formats ===
<code>
**adb map410 core410**
**<b,-1/8ona**
020000: 0 064124 071551 064440 020163 020141 064143 071141
_str1+016: 061541 062564 020162 072163 064562 063556 0 02
_number:
_number: 0710 0 02322 040240 0 064124 071551 064440
_str2+06: 020163 064164 020145 062563 067543 062156 061440 060550
_str2+026: 060562 072143 071145 071440 071164 067151 0147 0
savr5+02: 0 0 0 0 0 0 0 0
**<b,20/4o4^8Cn**
020000: 0 064124 071551 064440 @`@`This i
020163 020141 064143 071141 s a char
061541 062564 020162 072163 acter st
064562 063556 0 02 ring@`@`@b@`
_number: 0710 0 02322 040240 H@a@`@`R@d @@
0 064124 071551 064440 @`@`This i
020163 064164 020145 062563 s the se
067543 062156 061440 060550 cond cha
060562 072143 071145 071440 racter s
071164 067151 0147 0 tring@`@`@`
0 0 0 0 @`@`@`@`@`@`@`@`
0 0 0 0 @`@`@`@`@`@`@`@`
data address not found
**<b,20/4o4^8t8cna**
020000: 0 064124 071551 064440 This i
_str1+06: 020163 020141 064143 071141 s a char
_str1+016: 061541 062564 020162 072163 acter st
_str1+026: 064562 063556 0 02 ring
_number:
_number: 0710 0 02322 040240 HR
_fpt+02: 0 064124 071551 064440 This i
_str2+06: 020163 064164 020145 062563 s the se
_str2+016: 067543 062156 061440 060550 cond cha
_str2+026: 060562 072143 071145 071440 racter s
_str2+036: 071164 067151 0147 0 tring
savr5+02: 0 0 0 0
savr5+012: 0 0 0 0
data address not found
**<b,10/2b8t^2cn**
020000: 0 0
_str1: 0124 0150 Th
0151 0163 is
040 0151 i
0163 040 s
0141 040 a
0143 0150 ch
0141 0162 ar
0141 0143 ac
0164 0145 te
**$Q**
</code>
=== Figure 12: Directory and inode dumps ===
<code>
**adb dir -**
**=nt"Inode"t"Name"**
**0,-1?ut14cn**
Inode Name
0: 652 .
82 ..
5971 cap.c
5323 cap
0 pp
**adb /dev/src -**
**02000>b**
**?m<b**
new map `/dev/src'
b1 = 02000 e1 = 0100000000 f1 = 0
b2 = 0 e2 = 0 f2 = 0
**$v**
variables
b = 02000
**<b,-1?"flags"8ton"links,uid,gid"8t3bn"size"8tbrdn"addr"8t8un"times"8t2Y2na**
02000: flags 073145
links,uid,gid 0163 0164 0141
size 0162 10356
addr 28770 8236 25956 27766 25455 8236 25956 25206
times 1976 Feb 5 08:34:56 1975 Dec 28 10:55:15
02040: flags 024555
links,uid,gid 012 0163 0164
size 0162 25461
addr 8308 30050 8294 25130 15216 26890 29806 10784
times 1976 Aug 17 12:16:51 1976 Aug 17 12:16:51
02100: flags 05173
links,uid,gid 011 0162 0145
size 0147 29545
addr 25972 8306 28265 8308 25642 15216 2314 25970
times 1977 Apr 2 08:58:01 1977 Feb 5 10:21:44
</code>