1 |
|
|
2 |
< |
cxmon, Version 3.0 |
2 |
> |
cxmon, Version 3.2 |
3 |
|
A command-line file manipulation tool and disassembler |
4 |
|
|
5 |
< |
Copyright (C) 1997-2000 Christian Bauer, Marc Hellwig |
5 |
> |
Copyright (C) 1997-2007 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 |
|
|
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. |
21 |
> |
inspired by the "Amiga Monitor" by Timo Rossi. It has commands and features |
22 |
> |
similar to a machine code monitor/debugger, but it lacks any functions for |
23 |
> |
running/tracing code. There are, however, built-in PowerPC, 680x0, 80x86, |
24 |
> |
x86-64, 6502 and Z80 disassemblers and special support for disassembling |
25 |
> |
MacOS code. By default, cxmon operates on a fixed-size (but adjustable) |
26 |
> |
memory buffer with adresses starting at 0. |
27 |
|
|
28 |
|
|
29 |
|
Installation |
234 |
|
of "." is set to the address after the last address displayed. |
235 |
|
|
236 |
|
|
237 |
+ |
d8664 [start [end]] Disassemble x86-64 code |
238 |
+ |
|
239 |
+ |
disassembles the buffer contents from address "start" to address "end". |
240 |
+ |
Entering "d8086" without arguments is equivalent to "d8086 .". The value |
241 |
+ |
of "." is set to the address after the last address displayed. |
242 |
+ |
|
243 |
+ |
|
244 |
|
: start string Modify memory |
245 |
|
|
246 |
|
puts the specified byte string at the address "start" into the buffer. The |
399 |
|
d 100 |
400 |
|
|
401 |
|
|
402 |
+ |
Using cxmon in your own programs |
403 |
+ |
-------------------------------- |
404 |
+ |
|
405 |
+ |
cxmon provides a simple interface for integration in other programs. It can, |
406 |
+ |
for example, be used as a monitor/debugger for an emulator (it is used in |
407 |
+ |
Basilisk II in this way). |
408 |
+ |
|
409 |
+ |
Here's how to do it (all functions are defined in the mon.h header file): |
410 |
+ |
|
411 |
+ |
1. Link all the cxmon object files, except main.o, to your program. |
412 |
+ |
2. In your program, call mon_init() before using any other cxmon functions. |
413 |
+ |
3. After calling mon_init(), set the mon_read_byte and mon_write_byte |
414 |
+ |
function pointers to the routines used for accessing memory. |
415 |
+ |
4. You can use mon_add_command() to add new commands to cxmon by specifying |
416 |
+ |
the command name, function and help text. From within your command |
417 |
+ |
function, you can use mon_get_token() and mon_expression() to parse the |
418 |
+ |
arguments and the mon_read/write_*() functions to access memory. |
419 |
+ |
5. To enter cxmon, call the mon() function like this: |
420 |
+ |
|
421 |
+ |
char *args[3] = {"mon", "-r", NULL}; |
422 |
+ |
mon(2, args); |
423 |
+ |
|
424 |
+ |
6. If you're done with cxmon, call mon_exit(). |
425 |
+ |
|
426 |
+ |
|
427 |
|
History |
428 |
|
------- |
429 |
|
|
431 |
|
|
432 |
|
|
433 |
|
Christian Bauer |
434 |
< |
<Christian.Bauer@uni-mainz.de> |
434 |
> |
www.cebix.net |
435 |
|
|
436 |
|
Marc Hellwig |
437 |
|
<Marc.Hellwig@uni-mainz.de> |