Check if a CPU instruction has been used in a recording


When replaying a recording on a different machine, UDB can issue a warning about missing CPU features on that machine; this is because the machine where the recording was captured had a different CPU architecture (with usually more instruction sets) from the replay machine.

 

It would be useful if UDB could tell if the missing CPU instructions have actually been used during the recording (meaning that we’re unable to replay the recording on the other machine) or not (in which case, we could replay the recording on the other machine).

This is what UDB already does since version 6.0.

 

At record time, the Undo Engine keeps track of all the CPU features corresponding to instructions it encounters. When a LiveRecorder recording is saved, the features are saved in the recording’s header.

When you try to load a recording in UDB, UDB checks the features listed in the recording against the ones available on the current machine. If any required feature is not available, then UDB prints this and refuses to load the recording:

The recording cannot be replayed on this machine as it lacks some required features.

 

In  pre-6.0 versions, things worked differently, closer to what you say in your post. The Engine used to save the list of all CPU features available on the current machine.

As this check was far from perfect, we just reported a warning but still loaded the recording. This was  meant to warn the user that any SIGILL they could encounter was likely due to replaying the recording on a different CPU model.

 

If you try to load a pre-6.0 recording in UDB 6.0 or later and the CPU features don’t match, then you get a warnining like this:

No explicit CPU feature requirements are listed in
[…], but the process may have executed
instructions related to any of the following features that were
available on the hardware the recording was made on:
[…].