A final challenge is to emulate the kernel's behavior, since we're effectively delivering the message instead of the kernel. We need to make sure to translate the machine context passed to the handler to look like the signal occurred natively, which is a difficult task on Linux when signals can interrupt the DynamoRIO code itself and not just code cache code. Maintaining control requires detailed knowledge of the mechanics of these kernel transfers. We have to faithfully emulate the kernel's construction of signal frames, signal blocking, etc.
|Copyright © 2004 Derek Bruening|