1NAME=CC-*
2FILE=bins/mach0/FileDP
3CMDS=<<EOF
4C*~?
5CC~?
6CC-*
7CC~?
8C*~?
9EOF
10EXPECT=<<EOF
1139
1213
130
1426
15EOF
16RUN
17
18NAME=CCf-*
19FILE=bins/mach0/FileDP
20CMDS=<<EOF
21af
22CCf-*~?
23CC hello
24CC world @ $$+32
25CCf~?
26CCf-*
27CCf~?
28EOF
29EXPECT=<<EOF
300
312
320
33EOF
34RUN
35
36NAME=Cs
37FILE=malloc://1024
38CMDS=<<EOF
39w hello world
40Cs @ $$
41C*~[1]
42EOF
43EXPECT=<<EOF
4412
45EOF
46RUN
47
48NAME=Cs 5
49FILE=malloc://1024
50CMDS=<<EOF
51w hello world
52Cs 5
53C*~[1]
54EOF
55EXPECT=<<EOF
565
57EOF
58RUN
59
60NAME=Cz
61FILE=malloc://1024
62CMDS=<<EOF
63w hello world
64Cz
65C*~[1]
66EOF
67EXPECT=<<EOF
6812
69EOF
70RUN
71
72NAME=Cd : data
73FILE=malloc://1024
74CMDS=<<EOF
75e asm.arch=x86
76e asm.bits=32
77w 909090
78Cd 3
79pd 2
80EOF
81EXPECT=<<EOF
82            0x00000000      hex size=3 delta=0
830x00000000  3930 39                                  909
84
85            0x00000003      3039           xor byte [ecx], bh
86EOF
87RUN
88
89NAME=Cd : data + align
90FILE=malloc://1024
91BROKEN=1
92CMDS=<<EOF
93e asm.arch=x86
94e asm.bits=32
95w 909090
96Cd 3
97s 1
98pd 2
99EOF
100EXPECT=<<EOF
101            0x00000001 hex length=3 delta=1
1020x00000001  30 39                                    09
103
104            0x00000003      3039           xor byte [ecx], bh
105EOF
106RUN
107
108NAME=Cs : convert to string
109FILE=malloc://1024
110CMDS=<<EOF
111w hello
112Cs 6
113pd 1
114EOF
115EXPECT=<<EOF
116            0x00000000     .string "hello" ; len=6
117EOF
118RUN
119
120NAME=Cs : concatenated strings bug
121FILE=malloc://1024
122CMDS=<<EOF
123w hello\x00world
124Cs 6
125Cs 6@6
126pd 2
127EOF
128EXPECT=<<EOF
129            0x00000000     .string "hello" ; len=6
130            0x00000006     .string "world" ; len=6
131EOF
132RUN
133
134NAME=Cs : concatenated strings bug
135FILE=malloc://1024
136CMDS=<<EOF
137w hello\x00world
138Cs 6
139Cs 6@6
140pd 2
141EOF
142EXPECT=<<EOF
143            0x00000000     .string "hello" ; len=6
144            0x00000006     .string "world" ; len=6
145EOF
146RUN
147
148NAME=Cs : string count bug
149FILE=malloc://128
150CMDS=<<EOF
151w hello
152Cs 6
153C*~?
154EOF
155EXPECT=<<EOF
1561
157EOF
158RUN
159
160NAME=Ch : hide bytes in pd
161FILE=malloc://128
162CMDS=<<EOF
163e asm.arch=x86
164e asm.bits=64
165e scr.color=false
166wx 554889e54883c768
167Ch 2
168pd 2
169Ch-
170EOF
171EXPECT=<<EOF
172            0x00000000 (2 bytes hidden)
173            0x00000002      89e5           mov ebp, esp
174EOF
175RUN
176
177NAME=Ch : add/del hide bytes
178FILE=malloc://1024
179CMDS=<<EOF
180e scr.color=false
181wx 554889e54883c768
182Ch 2@0x100
183C*~?
184Ch-@0x100
185C*~?
186EOF
187EXPECT=<<EOF
1881
1890
190EOF
191RUN
192
193NAME=Cf should be silent
194FILE=-
195CMDS=Cf 32 2xx
196EXPECT=<<EOF
197EOF
198RUN
199
200NAME=format memory metadata
201FILE=-
202CMDS=<<EOF
203wx 41424344
204Cf 4 x
205pd 1
206EOF
207EXPECT=<<EOF
208            0x00000000 pf x # size=4
2090x00000000 = 0x44434241
210EOF
211RUN
212
213NAME=arm1.bin dword pointers with Cd
214FILE=bins/elf/arm1.bin
215CMDS=<<EOF
216s 0xdb98
217Cd 4[3]
218pd 3
219EOF
220EXPECT=<<EOF
221            0x0000db98      .dword 0x00085038 ; obj.main_arena
222            0x0000db9c      .dword 0x000844ac ; obj.check_action
223            0x0000dba0      .dword 0x000663c4 ; str.free__:_invalid_pointer
224EOF
225RUN
226
227NAME=arm1.bin dword pointers with Cd and ahi 1
228FILE=bins/elf/arm1.bin
229CMDS=<<EOF
230s 0xdb98
231Cd 4[3]
232ahi 1
233pd 3
234EOF
235EXPECT=<<EOF
236            0x0000db98      .int32 00111000010100000000100000000000b ; obj.main_arena
237            0x0000db9c      .dword 0x000844ac ; obj.check_action
238            0x0000dba0      .dword 0x000663c4 ; str.free__:_invalid_pointer
239EOF
240RUN
241
242NAME=arm1.bin dword pointers with Cd and ahi 8
243FILE=bins/elf/arm1.bin
244CMDS=<<EOF
245s 0xdb98
246Cd 4[3]
247ahi 8
248pd 3
249EOF
250EXPECT=<<EOF
251            0x0000db98      .int32 2050070o ; obj.main_arena
252            0x0000db9c      .dword 0x000844ac ; obj.check_action
253            0x0000dba0      .dword 0x000663c4 ; str.free__:_invalid_pointer
254EOF
255RUN
256
257NAME=arm1.bin dword pointers with Cd and ahi 10
258FILE=bins/elf/arm1.bin
259CMDS=<<EOF
260s 0xdb98
261Cd 4[3]
262ahi 10
263pd 3
264EOF
265EXPECT=<<EOF
266            0x0000db98      .int32 544824 ; obj.main_arena
267            0x0000db9c      .dword 0x000844ac ; obj.check_action
268            0x0000dba0      .dword 0x000663c4 ; str.free__:_invalid_pointer
269EOF
270RUN
271
272NAME=arm1.bin dword pointers with Cd and ahi 16
273FILE=bins/elf/arm1.bin
274CMDS=<<EOF
275s 0xdb98
276Cd 4[3]
277ahi 16
278pd 3
279EOF
280EXPECT=<<EOF
281            0x0000db98      .dword 0x00085038 ; obj.main_arena
282            0x0000db9c      .dword 0x000844ac ; obj.check_action
283            0x0000dba0      .dword 0x000663c4 ; str.free__:_invalid_pointer
284EOF
285RUN
286
287NAME=Ch and CCu on instr with potential LEA cmt
288FILE=bins/pe/ConsoleApplication1.exe
289CMDS=<<EOF
290Ch 6 @ 0x004010fa
291CCu get error @ 0x004010fa
292pd 1 @ 0x004010fa
293EOF
294EXPECT=<<EOF
295            0x004010fa (6 bytes hidden)                                ; get error
296EOF
297RUN
298
299NAME=C[Chsdmf][*j] without arguments
300FILE=malloc://1024
301CMDS=<<EOF
302k anal/meta/range.0x5=0x5120
303w hello world
304Cs @ $$
305s 0x100
306e asm.arch=x86
307e asm.bits=32
308w 909090
309Cd 3
310s 0x200
311wx 554889e54883c768
312Ch 2
313s 0x300
314wx 41424344
315Cf 4 x
316s 0x0
317CCu Hello!
318s 0x380
319wx cafebabe00000032
320Cm 8 wwww
321Cs
322?e ----
323Cd
324?e ----
325Ch
326?e ----
327Cf
328?e ----
329CC
330?e ----
331Cm
332?e ----
333C
334?e ----
335Cs*
336?e ----
337Cd*
338?e ----
339Ch*
340?e ----
341Cf*
342?e ----
343CC*
344?e ----
345Cm*
346?e ----
347C*
348?e ----
349Csj
350?e ----
351Cdj
352?e ----
353Chj
354?e ----
355Cfj
356?e ----
357CCj
358?e ----
359Cmj
360?e ----
361Cj
362EOF
363EXPECT=<<EOF
3640x00000000 ascii[12] "hello world"
365----
3660x00000100 data Cd 3
367----
3680x00000200 hidden Ch 2
369----
3700x00000300 format 4 x
371----
3720x00000000 CCu "Hello!"
373----
3740x00000380 magic 8 wwww
375----
3760x00000000 ascii[12] "hello world"
3770x00000000 CCu "Hello!"
3780x00000100 data Cd 3
3790x00000200 hidden Ch 2
3800x00000300 format 4 x
3810x00000380 magic 8 wwww
382----
383Cs 12 @ 0x00000000 # hello world
384----
385Cd 3 @ 0x00000100
386----
387Ch 2 @ 0x00000200
388----
389Cf 4 x @ 0x00000300
390----
391CCu base64:SGVsbG8h @ 0x00000000
392----
393Cm 8 wwww @ 0x00000380
394----
395Cs 12 @ 0x00000000 # hello world
396CCu base64:SGVsbG8h @ 0x00000000
397Cd 3 @ 0x00000100
398Ch 2 @ 0x00000200
399Cf 4 x @ 0x00000300
400Cm 8 wwww @ 0x00000380
401----
402[{"offset":0,"type":"Cs","name":"aGVsbG8gd29ybGQ=","enc":"latin1","ascii":true}]
403----
404[{"offset":256,"type":"Cd","name":"","size":3}]
405----
406[{"offset":512,"type":"Ch","name":""}]
407----
408[{"offset":768,"type":"Cf","name":"x"}]
409----
410[{"offset":0,"type":"CCu","name":"Hello!"}]
411----
412[{"offset":896,"type":"Cm","name":"wwww"}]
413----
414[{"offset":0,"type":"Cs","name":"aGVsbG8gd29ybGQ=","enc":"latin1","ascii":true},{"offset":0,"type":"CCu","name":"Hello!"},{"offset":256,"type":"Cd","name":"","size":3},{"offset":512,"type":"Ch","name":""},{"offset":768,"type":"Cf","name":"x"},{"offset":896,"type":"Cm","name":"wwww"}]
415EOF
416RUN
417
418NAME=Cs ascii/latin1
419FILE=bins/pe/testapp-msvc64.exe
420CMDS=<<EOF
421Csa @ 0x1400160a0
422Cs~gate
423Cs~ANSI
424EOF
425EXPECT=<<EOF
4260x1400160a0 latin1[18] "latin1 gate: \xce\xbb\xab\xce"
4270x1400160b8 ascii[50] "  -- in ConEmu, run `chcp 28591` to see the gate."
4280x140016000 ascii[19] "\tANSI\\esc: \e[33m\r\n"
429EOF
430RUN
431
432NAME=Csj ascii/latin1
433FILE=bins/pe/testapp-msvc64.exe
434ARGS=-z
435CMDS=<<EOF
436Csa @ 0x1400160a0
437Csg @ 0x1400160b8
438Csj
439EOF
440EXPECT=<<EOF
441[{"offset":5368799392,"type":"Cs","name":"bGF0aW4xIGdhdGU6IM67q84=","enc":"latin1","ascii":false},{"offset":5368799416,"type":"Cs","name":"ICAtLSBpbiBDb25FbXUsIHJ1biBgY2hjcCAyODU5MWAgdG8gc2VlIHRoZSBnYXRlLg==","enc":"latin1","ascii":true}]
442EOF
443RUN
444
445NAME=Csg, Csa, Cs. and Cs..
446FILE=bins/pe/testapp-msvc64.exe
447CMDS=<<EOF
448e str.escbslash=true
449s 0x140016018
450Csa
451Cs*~`s:`
452Cs.
453Cs..
454pd 1
455Csg
456Cs*~`s:`
457Cs.
458Cs..
459pd 1
460Csa 4
461Cs..
462Cs.. @ 0x14001601c  # should print nothing
463Csg 4
464Cs..
465Cs.. @ 0x14001601c  # should print nothing
466EOF
467EXPECT=<<EOF
468Csa 2 @ 0x140016018 # \t
469"\t"
470ascii[2] "\t"
471            ;-- str._twideesc:_e_0m:
472            0x140016018     .string "\t" ; len=2
473Cs 19 @ 0x140016018 # \twide\\esc: \x1b[0m\xa1\r\n
474"\twide\\esc: \x1b[0m\xa1\r\n"
475latin1[19] "\twide\\esc: \x1b[0m\xa1\r\n"
476            ;-- str._twideesc:_e_0m:
477            0x140016018     .string "\twide\\esc: \x1b[0m\xa1\r\n" ; len=19
478ascii[4] "\t"
479ascii[4] "\twid"
480EOF
481RUN
482
483NAME=Csg, Csa and Csj
484FILE=bins/pe/testapp-msvc64.exe
485ARGS=-e bin.str.purge=all,!0x140016018
486CMDS=<<EOF
487s 0x140016018
488Csj
489Csa
490Csj
491Csg
492Csj
493EOF
494EXPECT=<<EOF
495[{"offset":5368799256,"type":"Cs","name":"XHR3aWRlXFxlc2M6IFxlWzBt","enc":"iz","ascii":true}]
496[{"offset":5368799256,"type":"Cs","name":"CQ==","enc":"latin1","ascii":true}]
497[{"offset":5368799256,"type":"Cs","name":"CXdpZGVcZXNjOiAbWzBtoQ0K","enc":"latin1","ascii":false}]
498EOF
499RUN
500
501NAME=Cs8
502FILE=bins/elf/strenc
503CMDS=<<EOF
504e str.escbslash=true
505s 0x004021ff
506Cs*~`s:`
507Cs.
508Cs..
509pd 1
510Cs8
511Cs*~`s:`
512Cs.
513Cs..
514pd 1
515EOF
516EXPECT=<<EOF
517Cs 61 @ 0x004021ff # utf8> \\u00a2\\u20ac\\U00010348 in yellow:\e[33m \xc2\xa2\xe2\x82\xac\xf0\x90\x8d\x88 \e[0m\n
518"utf8> \\u00a2\\u20ac\\U00010348 in yellow:\e[33m \xc2\xa2\xe2\x82\xac\xf0\x90\x8d\x88 \e[0m\n"
519latin1[61] "utf8> \\u00a2\\u20ac\\U00010348 in yellow:\e[33m \xc2\xa2\xe2\x82\xac\xf0\x90\x8d\x88 \e[0m\n"
520            ;-- str.utf8__u00a2u20acU00010348_in_yellow:e_33m__e_0m_n:
521            0x004021ff     .string "utf8> \\u00a2\\u20ac\\U00010348 in yellow:\e[33m \xc2\xa2\xe2\x82\xac\xf0\x90\x8d\x88 \e[0m\n" ; len=61
522Cs8 61 @ 0x004021ff # utf8> \\u00a2\\u20ac\\U00010348 in yellow:\x1b[33m \u00a2\u20ac\U00010348 \x1b[0m\n
523"utf8> \\u00a2\\u20ac\\U00010348 in yellow:\x1b[33m \u00a2\u20ac\U00010348 \x1b[0m\n"
524utf8[61] "utf8> \\u00a2\\u20ac\\U00010348 in yellow:\x1b[33m \u00a2\u20ac\U00010348 \x1b[0m\n"
525            ;-- str.utf8__u00a2u20acU00010348_in_yellow:e_33m__e_0m_n:
526            0x004021ff     .string "utf8> \\u00a2\\u20ac\\U00010348 in yellow:\x1b[33m \u00a2\u20ac\U00010348 \x1b[0m\n" ; len=61
527EOF
528RUN
529
530NAME=Cs8 and Csj
531FILE=bins/elf/strenc
532ARGS=-e bin.str.purge=all,!0x004021ff
533CMDS=<<EOF
534s 0x004021ff
535Csj
536Cs8
537Csj
538EOF
539EXPECT=<<EOF
540[{"offset":4203007,"type":"Cs","name":"dXRmOD4gXFx1MDBhMlxcdTIwYWNcXFUwMDAxMDM0OCBpbiB5ZWxsb3c6XGVbMzNtIMKi4oKs8JCNiCBcZVswbVxu","enc":"iz","ascii":false}]
541[{"offset":4203007,"type":"Cs","name":"dXRmOD4gXHUwMGEyXHUyMGFjXFUwMDAxMDM0OCBpbiB5ZWxsb3c6G1szM20gwqLigqzwkI2IIBtbMG0K","enc":"utf8","ascii":false}]
542EOF
543RUN
544
545NAME=str.escbslash and Cs
546FILE=bins/pe/testapp-msvc64.exe
547CMDS=<<EOF
548s 0x140016000
549Csa
550e str.escbslash=true
551Cs.
552Cs..
553pd 1
554e str.escbslash=false
555Cs.
556Cs..
557pd 1
558EOF
559EXPECT=<<EOF
560"\tANSI\\esc: \x1b[33m\r\n"
561ascii[19] "\tANSI\\esc: \x1b[33m\r\n"
562            ;-- str._tANSIesc:_e_33m_r_n:
563            ;-- section..data:
564            0x140016000     .string "\tANSI\\esc: \x1b[33m\r\n" ; len=19 ; [02] -rw- section size 8192 named .data
565"\tANSI\esc: \x1b[33m\r\n"
566ascii[19] "\tANSI\esc: \x1b[33m\r\n"
567            ;-- str._tANSIesc:_e_33m_r_n:
568            ;-- section..data:
569            0x140016000     .string "\tANSI\esc: \x1b[33m\r\n" ; len=19 ; [02] -rw- section size 8192 named .data
570EOF
571RUN
572
573NAME=Cd- <size> <repeat>
574FILE=-
575CMDS=<<EOF
576s 0x100
577Cd 4 5
578Cd
579?e ----
580Cd- 4 3
581Cd
582?e ----
583s 0x10c
584Cd- 0 2
585Cd
586EOF
587EXPECT=<<EOF
5880x00000100 data Cd 4
5890x00000104 data Cd 4
5900x00000108 data Cd 4
5910x0000010c data Cd 4
5920x00000110 data Cd 4
593----
5940x0000010c data Cd 4
5950x00000110 data Cd 4
596----
5970x0000010c data Cd 4
5980x00000110 data Cd 4
599EOF
600RUN
601
602NAME=delete specific type of metadata from addr
603FILE=-
604CMDS=<<EOF
605s 0x100
606w abcd
607Csa 4
608Cf 8 xx
609C
610?e ----
611Cs-
612C
613?e ----
614Cf-
615C
616EOF
617EXPECT=<<EOF
6180x00000100 ascii[4] "abcd"
6190x00000100 format 8 xx
620----
6210x00000100 format 8 xx
622----
623EOF
624RUN
625
626NAME=C-
627FILE=-
628CMDS=<<EOF
629s 0x100
630w abcd
631Csa 4
632Cf 8 xx
633CCu a string
634C
635?e ----
636C-
637C
638EOF
639EXPECT=<<EOF
6400x00000100 ascii[4] "abcd"
6410x00000100 format 8 xx
6420x00000100 CCu "a string"
643----
644EOF
645RUN
646
647NAME=Cd- and C- in issue #8648
648FILE=-
649CMDS=<<EOF
650s 0x100
651Cd 4 1
652C*~Cd
653?e --1--
654Cd- 4 1
655C*~Cd
656?e --2--
657Cd 4 1
658Cd-
659C*~Cd
660?e --3--
661Cd 4 1
662C-
663C*~Cd
664?e --4--
665Cd 4 1
666C- 4
667C*~Cd
668EOF
669EXPECT=<<EOF
670Cd 4 @ 0x00000100
671--1--
672--2--
673--3--
674--4--
675EOF
676RUN
677
678NAME=Cd. (#10856)
679FILE=-
680CMDS=<<EOF
681s 0x50
682Cd 4 2
683Cd.
684s 0x100
685Cd. @ 0x50
686EOF
687EXPECT=<<EOF
6884
6894
690EOF
691RUN
692
693NAME=C.
694FILE=bins/elf/arm1.bin
695CMDS=<<EOF
696s 0x0007a23c
697C.
698s 0x00083fc4
699C.
700EOF
701EXPECT=<<EOF
7020x0007a23c ascii[13] "match_symbol"
7030x00083fc4 data Cd 4
7040x00083fc4 CCu "[14] -rw- section size 4 named .init_array"
705EOF
706RUN
707