An object code expansion program inserts new instructions and data between
preexisting instructions and data of an object code file; offsets are
modified to reflect new positions of the preexisting instructions and
data. For each item of preexisting object code (instructions or data),
the following steps are performed: making a new code block comprising any
desired new instructions and the item, and storing it as new object code;
tracking the location of the item and the new code block within the new
object code; and tracking items that contain inter-item offsets. Then,
each inter-item offset is updated using the new location of the item or
new code block, as required. Finally, offsets in symbol tables and
relocation structures are updated with the new location of the item.This
expansion program is used to add instructions to object code files of a
second program, to monitor substantially all of the memory accesses of
the second program. The added instructions establish and maintain a
memory status array with entries for memory locations that are validly
accessible by the second program; entries indicate the status of
corresponding memory locations. The memory status array is used to check
for the errors of writing to unallocated memory and reading from
unallocated or uninitialized memory. Also, the data section of the object
code files are expanded with extra dummy entries to aid in the detection
of array bounds violations and similar data errors. Furthermore,
watchpoints can be established for more comprehensive monitoring.