| If you have XDELTA, follow the instructions for activating XDELTA
on a running system. If it isn't loaded, AND what you want to
change is in non-paged pool, try the following from a suitably
privileged account:
$ RUN SYS$LIBRARY:DELTA
1;M
10001:sys_space_addr/ new
The 10001: tells DELTA to do the examine or deposit from the context
of process 10001, which is the PID of the SWAPPER. Obviously,
you can't set breakpoints (unless you want to crash!) I've used
it to change values in UCB's, etc...
Also, it isn't "atomic" enough to replace values more than a longword,
or to change instructions that span more than one instruction or
a longword. Use with caution.
|
| Below, I'll tell you another way to do it.
First, a question: How come SDA won't let you do it, under the ANALYZE/SYSTEM
facility ? Is it just that it's considered too dangerous ? Certainly
in terms of programming it, it's trivial, particularly in an environment
like SDA which seems to understand all the necessary syntaxes already.
Any developers want to reveal some history on this ?
Anyway, it's interesting that you bring up the topic now. Just this
week, I implemented a tool to do exactly what you asked for. Once
you have my tool, you can say right at DCL:
$ @w {LONG,WORD,BYTE} address value
For instance
$ @w long 80307ff0 100
To get this tool, please copy files W.* from hannah::usrd$:[osman.rmx].
Then, to use it, just @ the w.com file.
I haven't yet put in any safety checks so make sure you specify EXACTLY
what size, address, and value you intend, or system will crash.
Safety checks I'm considering:
o Require you to enter correct OLD value you're replacing
o Do a PROBER and PROBEW to make sure page exists.
o Exception handler to catch what PROBEs don't (is this
ever necessary, except in the case of race conditions ?)
Please let me know if the tool works for you.
/Eric
|