home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Elysian Archive
/
AmigaElysianArchive.iso
/
prog
/
utils
/
hart.lha
/
README
< prev
Wrap
Text File
|
1992-05-25
|
10KB
|
251 lines
*****************************************************************************
* *
* Conditions of use HeartBeat 1.0 *
* ----------------- ------------- *
* *
* This program has been provided for the enjoyment of the masses. *
* It is Public Domain. *
* Since the author doesn't ask for anything in return, the user *
* will accept the following conditions: *
* *
* 1) In no case whatsoever shall the author be liable for any *
* damages, losses etc... due to the use of this program. *
* 2) Distribution of the program is only allowed subject to the *
* following restrictions: *
* *
* 2.a) No file part of this distribution will be omitted or *
* modified in any way. *
* 2.b) None of the files which are part of this distribution *
* should be stored on environmentally unfriendly media. *
* (e.g. paper! (listings, faxes)) *
* *
* Laurence Vanhelsuwé *
* 22-APR-92 *
* *
*****************************************************************************
** PROGRAM REQUIRES DOS 2.0 TO RUN **
** PROGRAM REQUIRES DOS 2.0 TO RUN **
Program Title : HeartBeat (HB) (Version 1.0)
-------------------------
Author : Laurence Vanhelsuwé
----------------------------
0. Short description:
------------------
HeartBeat is a system call monitor which allows all system calls
accessible through libraries, devices or resources to be snooped
on. Generic argument snooping is also provided.
1. Requirements/Installation:
--------------------------
This program makes heavy use of the new 2.0 system calls.
Additionally HeartBeat assumes a logical directory (assign) called
FD:
which contains ".fd" files (as many as you can lay your hands on).
These files are normally distributed on Workbench disks and describe
system library, device and resource calls.
2. How to use it:
--------------
Just type the following at any Shell prompt:
RUN HeartBeat
I suggest you "run" HeartBeat because HB currently changes the
current directory but does not restore it before exiting (sorry).
Using a "RUN" shields you from this side-effect.
Check out the menus and you'll get:
PROJECT OPTIONS LIBRARIES A-I LIBRARIES J-Z
Your main menus are the two library menus which list all the
libraries that HeartBeat knows about (and devices and resources).
Select any library you're familiar with and you'll be presented
with a list of its system calls.
Now select a system call by moving the highlight over the function
and click... you are now monitoring this call.
A seperate window popped up to display your monitored function.
Using a similar select-and-click method in this second window you can
bring up the register template window and define an "arguments match
template".
You are presented with 32 string gadgets: one pair for every data and
address register of the 680x0. One for the register's value (or bits
you want to see set or cleared) and one for a mask defining which bits
you care about (0 means you don't care at all what value this register
is).
Note that the string gadgets accept decimal and hexadecimal numbers
(prefixed with $).
The default values which initially appear are explained as follows:
- register A7 has a mask of $FFFFFFFF and a value of $00000000.
(this ensures a "no match" WHATEVER the settings of the other
registers are since the SP can never point to 0!).
- register D0 has a mask of $FFFFFFFF and a garbage value of $A1B2C3D4
(this gives a very high probability of a "no match" as detected by
the wedge routine since it starts with D0,D1,D2...)
Basically this is done to prevent matches occuring before you've
defined the template yourself (the matching process is active all the
time).
You can select between two match action modes:
- just count matches (a separate counter is used for matches)
- freeze calling Task (a "!" will turn into a "*" in output window)
The freezing option only works if you explicitly tell HeartBeat
which Task in the system you want to monitor.
This is done by selecting the "Watch Task..." option in the OPTIONS
menu.
The project menu allows you to load and save a HeartBeat "session".
A session is just the collection of system functions that you are
currently monitoring.
When loading a previously saved session, the window with monitored
functions might contain less functions as originally saved.
This is because the library (device or resource) to which these
functions belong might not be accessible this time round (not opened).
(e.g. the rexxsyslib might have been accessible by HeartBeat when
saving a session but not any more when loading).
3. HeartBeat: it's uses.
---------------------
HeartBeat is a system call monitor.
HB complements programs like MonIDCMP, SnoopDOS or SPY, although HB
does not have any bias towards a particular library like SnoopDOS
or SPY.
Because of this general-purpose nature, HB can't give you very
detailed information of what the parameters passed to a routine
are. In fact, it doesn't give you any. (ha!)
It just counts each call made, whether by a specific Task in the
system or globally (by any Task).
In this simple mode HeartBeat can be viewed as a higher level
extension to my other system utility :
ISAN (Instruction Stream ANalyzer)
which has also been put in the Public Domain.
To make the program a bit more useful, you can also define a
register arguments template on a per-function basis: you could for
example count the number of times AllocMem() is called with the
MEMF_CHIP flag set.
You would do this by defining a value and mask for data register
D1 (where the memory type argument has to be passed) and specifying
"don't care" masks for all other registers of the 680x0.
To make the program somewhat more productive you can ask HeartBeat
to freeze the calling Task when an argument template matches.
You can obviously un-freeze such a Task too (by clicking on the
function when its frozen marker "*" has appeared).
Example uses:
- work out whether a program uses OS 2.0 calls or not.
- snooping on programs to see if they use system calls when..
a) they should (to allocate memory for example) or when
b) they shouldn't
(for example THE bottleneck of a brilliant ecology simulator
program called "Jitter" could very well be its use of
RectFill(); to draw just 4 pixels RectFill() uses nothing
less than the Blitter to do its stuff and this could be
re-coded to be at least ten times faster in optimized
assembler!!)
- learn about the Amiga and surprise yourself at how often or how
rarely functions get called... and wonder whether the frequently
called ones are implemented efficiently or not...
- catching faulty programs or viri by intercepting calls with
particular pararmeters. (a virus might well make AllocAbs() or
SetFunction() calls).
4. Internals:
----------
HeartBeat gets all its "knowledge" of Amiga system internals from
the .fd files in the FD: directory.
From these files it extracts:
a) library names (or device or resource names)
b) function LVOs and names
c) function accessability
c) Means that HeartBeat does not allow you to access system private
functions (##private).
5. HeartBeat Limitations/Warnings:
-------------------------------
!CRASH! Be careful when monitoring Exec and other low-level and/or critical
libraries.
In particular all Exec routines which rely on privilege exception
trapping tricks will crash the system when attempting to monitor them.
Similarly the SumLibrary() function crashes because of SetFunction()
interactions.
!CRASH! Be very careful too with HeartBeat's freeze option.
Freezing any system Task which disables any part of the system that
you in turn need to unfreeze the Task (e.g. mouse input routines,
sprite moving routines, Text printing routines...) will effectively
result in freezing the entire machine !
6. History:
--------
I like low-level system utilities like this.
I think they should be provided as standard when you buy a machine
like the Amiga.
AmigaDOS' "STATUS FULL" and "BREAK" commands are just pathetic
when you compare them with what a UNIX hacker has at his disposal.
Since the Amiga has quite a lot in common (complexity wise) with
UNIX machines the Amiga user should also have an arsenal of tools
at his side to make better use of his machine.
7. Future:
-------
Some ideas for future versions of HeartBeat are already:
- allow function RESULTS to be trapped too (handy for errors)
- allow argument register mappings to be defined (SetAPen(1)->SetAPen(2))
- remove all bugs in current version...
To any programmers thinking of enhancing HB: please don't "adopt"
HeartBeat yet. I know it's far from robust and complete at this moment,
but it's already useful enough to be released.
I'd like to get some feedback and work one the next release myself.
8. Credits:
--------
Since I'm still stuck with old 1.2 Rom Kernal Manuals and the like,
I could not have written this program without the source codes of
various 2.0 programs in the Fish library.
I am especially grateful to Steve Tibbett for adding the source
to his PSX release (even though it's a bit sparse on comments !!).
Any comments, ideas or bug reports?
My name and address are:
Laurence Vanhelsuwé
720, Anlaby Road
Hull
HU4 6BP
United Kingdom
Enjoy !