ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/cebix/mon/README
Revision: 1.9
Committed: 2000-10-18T00:50:00Z (24 years, 1 month ago) by cebix
Branch: MAIN
Changes since 1.8: +25 -0 lines
Log Message:
- fixes for BeOS
- added section about linking cxmon to other programs to the docs

File Contents

# Content
1
2 cxmon, Version 3.0
3 A command-line file manipulation tool and disassembler
4
5 Copyright (C) 1997-2000 Christian Bauer, Marc Hellwig
6 GNU binutils disassemblers Copyright (C) 1988, 89, 91, 93, 94, 95, 96, 97, 1998
7 Free Software Foundation, Inc.
8
9
10 License
11 -------
12
13 cxmon is available under the terms of the GNU General Public License. See the
14 file "COPYING" that is included in the distribution for details.
15
16
17 Overview
18 --------
19
20 cxmon is an interactive command-driven file manipulation tool that is
21 inspired by the "Amiga Monitor" by Timo Rossi <trossi@jyu.fi>. It has
22 commands and features similar to a machine code monitor/debugger, but it
23 lacks any functions for running/tracing code. There are, however, built-in
24 PowerPC, 680x0, 80x86, 6502 and Z80 disassemblers. By default, cxmon operates
25 on a fixed-size (but adjustable) memory buffer with adresses starting at 0.
26
27
28 Installation
29 ------------
30
31 Please consult the file "INSTALL" for installation instructions.
32
33
34 Usage
35 -----
36
37 cxmon can be started from the Shell or from the Tracker (BeOS), but command
38 line history doesn't work when started from the Tracker.
39
40 Options:
41 -m enables symbolic MacOS A-Trap and low memory globals display in the
42 680x0 disassembler
43 -r makes cxmon operate in real (virtual) memory space instead of an
44 allocated buffer
45
46 If no additional command line arguments are given, cxmon enters interactive
47 mode. Otherwise, all remaining arguments are interpreted and executed as cxmon
48 commands.
49
50 The default buffer size is 1MB.
51
52 The cxmon command prompt looks like this:
53
54 [00000000]->
55
56 The number in brackets is the value of "." (the "current address", see the
57 section on expressions). You can get a short command overview by entering
58 "h".
59
60 Commands that create a longer output can be interrupted with Ctrl-C.
61
62 To quit cxmon, enter the command "x".
63
64
65 Constants, variables and expressions
66 ------------------------------------
67
68 The default number base is hexadecimal. Decimal numbers must be prefixed with
69 "_". Hexadecimal numbers may also be prefixed with "$" for clarity. Numbers
70 can also be entered as ASCII characters enclosed in single quotes (e.g. 'BAPP'
71 is the same as $42415050). All numbers are 32-bit values (one word).
72
73 With the "set" command, variables can be defined that hold 32-bit integer
74 values. A variable is referred to by its name. Variable names may be arbitrary
75 combinations of digits and letters (they may also start with a digit) that
76 are not also valid hexadecimal numbers. Names are case-sensitive.
77
78 cxmon accepts expressions in all places where you have to specify a number.
79 The following operators are available and have the same meaning and
80 precedence as in the C programming language:
81
82 ~ complement
83 + unary plus
84 - unary minus
85 * multiplication
86 / integer division
87 % modulo
88 + addition
89 - subtraction
90 << shift left
91 >> shift right
92 & bitwise AND
93 ^ bitwise exclusive OR
94 | bitwise inclusive OR
95
96 Parentheses may be used to change the evaluation order of sub-expressions.
97
98 There are two special symbols that can be used in expressions:
99
100 . represents the "current address" (the value of "." is also displayed in
101 the command prompt). What exactly the current address is, depends on the
102 command last executed. The display commands set "." to the address after
103 the last address displayed, the "hunt" commands sets "." to the address
104 of the first found occurence of the search string, etc.
105 : is used by the "apply" ("y") command and holds the value of the byte/
106 half-word/word at the current address.
107
108 The "modify" (":"), "fill" ("f") and "hunt" ("h") commands require you to
109 specify a byte string. Byte strings consist of an arbitrary number of byte
110 values and ASCII strings separated by commas. Examples:
111
112 "string"
113 12,34,56,78,9a,bc,de,f0
114 "this",0a,"is a string",0a,"with","newlines",_10
115
116
117 The buffer
118 ----------
119
120 Those cxmon commands that operate on "memory" operate on a buffer allocated
121 by cxmon whose size is adjustable with the "@" command. The default buffer
122 size is 1MB. The buffer is an array of bytes where each byte has a 32-bit
123 integer address. Addresses start at 0 and are taken modulo the buffer size
124 (i.e. for the default 1MB buffer, addresses 0 and 100000 refer to the same
125 byte).
126
127 The buffer is the working area of cxmon where you load files into, manipulate
128 them, and write files back from. Arbitraty portions of the buffer may be used
129 as scratch space.
130
131
132 Commands
133 --------
134
135 The following commands are available in cxmon ('[]' marks a parameter than
136 can be left out):
137
138
139 x Quit cxmon
140
141 quits cxmon and returns to the shell.
142
143
144 h Show help text
145
146 displays a short overview of commands.
147
148
149 ?? Show list of commands
150
151 displays a short list of available commands.
152
153
154 ver Show version
155
156 shows the version number of cxmon.
157
158
159 ? expression Calculate expression
160
161 displays the value of the given expression in hex, decimal, and ASCII
162 characters. If the value is negative, it is displayed as a signed and unsigned
163 number.
164
165
166 @ [size] Reallocate buffer
167
168 changes the size of the buffer to the given number of bytes while preserving
169 the contents of the buffer. If the "size" argument is omitted, the current
170 buffer size is displayed.
171
172
173 i [start [end]] ASCII memory dump
174
175 displays the buffer contents from address "start" to address "end" as ASCII
176 characters. Entering "i" without arguments is equivalent to "i .". The value
177 of "." is set to the address after the last address displayed.
178
179
180 b [start [end]] Binary memory dump
181
182 displays the buffer contents from address "start" to address "end" in a binary
183 format. Entering "b" without arguments is equivalent to "b .". The value of
184 "." is set to the address after the last address displayed.
185
186
187 m [start [end]] Hex/ASCII memory dump
188
189 displays the buffer contents from address "start" to address "end" as hex
190 words and ASCII characters. Entering "m" without arguments is equivalent to
191 "m .". The value of "." is set to the address after the last address displayed.
192
193
194 d [start [end]] Disassemble PowerPC code
195
196 disassembles the buffer contents from address "start" to address "end".
197 Entering "d" without arguments is equivalent to "d .". The value of "." is
198 set to the address after the last address displayed.
199
200
201 d65 [start [end]] Disassemble 6502 code
202
203 disassembles the buffer contents from address "start" to address "end".
204 Entering "d65" without arguments is equivalent to "d65 .". The value of
205 "." is set to the address after the last address displayed.
206
207
208 d68 [start [end]] Disassemble 680x0 code
209
210 disassembles the buffer contents from address "start" to address "end".
211 Entering "d68" without arguments is equivalent to "d68 .". The value of
212 "." is set to the address after the last address displayed.
213
214
215 d80 [start [end]] Disassemble Z80 code
216
217 disassembles the buffer contents from address "start" to address "end".
218 Entering "d80" without arguments is equivalent to "d80 .". The value of
219 "." is set to the address after the last address displayed.
220
221
222 d86 [start [end]] Disassemble 80x86 (32-bit) code
223
224 disassembles the buffer contents from address "start" to address "end".
225 Entering "d86" without arguments is equivalent to "d86 .". The value of
226 "." is set to the address after the last address displayed.
227
228
229 d8086 [start [end]] Disassemble 80x86 (16-bit) code
230
231 disassembles the buffer contents from address "start" to address "end".
232 Entering "d8086" without arguments is equivalent to "d8086 .". The value
233 of "." is set to the address after the last address displayed.
234
235
236 : start string Modify memory
237
238 puts the specified byte string at the address "start" into the buffer. The
239 value of "." is set to the address after the last address modified.
240
241
242 f start end string Fill memory
243
244 fill the buffer in the range from "start" to (and including) "end" with the
245 given byte string.
246
247
248 y[b|h|w] start end expr Apply expression to memory
249
250 works like the "fill" ("f") command, but it doesn't fill with a byte string
251 but with the value of an expression that is re-evaluated for each buffer
252 location to be filled. The command comes in three flavors: "y"/"yb" works on
253 bytes (8-bit), "yh" on half-words (16-bit) and "yw" on words (32-bit). The
254 value of "." is the current address to be modified, the value of ":" holds
255 the contents of this address before modification.
256
257 Examples:
258 yw 0 fff :<<8 shifts all words in the address range 0..fff to the left
259 by 8 bits (you can use this to convert bitmap data from
260 ARGB to RGBA format, for example)
261 y 0 1234 ~: inverts all bytes in the address range 0..1234
262 yh 2 ff 20000/. creates a table of the fractional parts of the reciprocals
263 of 1..7f
264
265
266 t start end dest Transfer memory
267
268 transfers the buffer contents from "start" to (and including) "end" to "dest".
269 Source and destination may overlap.
270
271
272 c start end dest Compare memory
273
274 compares the buffer contents in the range from "start" to (and including)
275 "end" with the contents at "dest". The addresses of all different bytes and
276 the total number of differences (decimal) are printed.
277
278
279 h start end string Search for byte string
280
281 searches for the given byte string in the buffer starting at "start" up to
282 (and including) "end". The addresses and the total number of occurrences are
283 displayed. The value of "." is set to the address of the first occurrence.
284
285
286 \ "command" Execute shell command
287
288 executes the given shell command which must be enclosed in quotes.
289
290
291 ls [args] List directory contents
292
293 works as the shell command "ls".
294
295
296 rm [args] Remove file(s)
297
298 works as the shell command "rm".
299
300
301 cp [args] Copy file(s)
302
303 works as the shell command "cp".
304
305
306 mv [args] Move file(s)
307
308 works as the shell command "mv".
309
310
311 cd directory Change current directory
312
313 works as the shell command "cd". The name of the directory doesn't have to be
314 enclosed in quotes.
315
316
317 o ["file"] Redirect output
318
319 When a file name is specified, all following output is redirected to this
320 file. The file name must be enclosed in quotation marks even if it contains
321 no spaces. Entering "o" without parameters closes the file and directs the
322 output into the terminal window again.
323
324
325 [ start "file" Load data from file
326
327 loads the contents of the specified file into the buffer starting from address
328 "start". The file name must be enclosed in quotation marks even if it contains
329 no spaces. The value of "." is set to the address after the last address
330 affected by the load.
331
332
333 ] start size "file" Save data to file
334
335 writes "size" number of bytes of the buffer from "start" to the specified file.
336 The file name must be enclosed in quotation marks even if it contains no spaces.
337
338
339 set [var[=value]] Set/clear/show variables
340
341 If no arguments are given, all currently defined variables are displayed.
342 Otherwise, the value of "var" is set to the specified value. If "=value"
343 is omitted, the variable "var" is cleared.
344
345
346 cv Clear all variables
347
348 clears all currently defined variables.
349
350
351 Examples
352 --------
353
354 Here are some simple examples for what is possible with cxmon.
355
356 Join "file1" and "file2" to "file3":
357
358 [ 0 "file1"
359 [ . "file2"
360 ] 0 . "file3"
361
362 Remove the first 24 bytes (e.g. an unneeded header) of a file:
363
364 [ 0 "file"
365 ] 18 .-18 "file"
366
367 Load the cxmon executable and search for PowerPC "nop" commands:
368
369 [ 0 "cxmon"
370 h 0 . 60,00,00,00
371
372 Create a modified version of cxmon so that the prompt has " $" instead of
373 "->":
374
375 [ 0 "cxmon"
376 set size=.
377 h 0 . "->"
378 : . " $"
379 ] 0 size "cxmon1"
380
381 Convert a binary file which contains 16-bit numbers in little-endian format
382 to big-endian format (or vice-versa):
383
384 [ 0 "file"
385 yh 0 .-1 :>>8|:<<8
386 ] 0 . "file"
387
388 Load a BeBox boot ROM image and start disassembling the system reset handler:
389
390 [ 0 "bootnub.image"
391 d 100
392
393
394 Using cxmon in your own programs
395 --------------------------------
396
397 cxmon provides a simple interface for integration in other programs. It can,
398 for example, be used as a monitor/debugger for an emulator (it is used in
399 Basilisk II in this way).
400
401 Here's how to do it (all functions are defined in the mon.h header file):
402
403 1. Link all the cxmon object files, except main.o, to your program.
404 2. In your program, call mon_init() before using any other cxmon functions.
405 3. After calling mon_init(), set the mon_read_byte and mon_write_byte
406 function pointers to the routines used for accessing memory.
407 4. You can use mon_add_command() to add new commands to cxmon by specifying
408 the command name, function and help text. From within your command
409 function, you can use mon_get_token() and mon_expression() to parse the
410 arguments and the mon_read/write_*() functions to access memory.
411 5. To enter cxmon, call the mon() function like this:
412
413 char *args[3] = {"mon", "-r", NULL};
414 mon(2, args);
415
416 6. If you're done with cxmon, call mon_exit().
417
418
419 History
420 -------
421
422 Please consult the file "ChangeLog" for the release history.
423
424
425 Christian Bauer
426 <Christian.Bauer@uni-mainz.de>
427
428 Marc Hellwig
429 <Marc.Hellwig@uni-mainz.de>