Xref: news2.mv.net comp.os.msdos.djgpp:5507 From: Ed Kaulakis Newsgroups: comp.os.msdos.djgpp Subject: Re: Hookingi nterrupts in C++ Date: Fri, 28 Jun 1996 12:41:20 +0000 Organization: Medi-Comp Innovations Group Lines: 25 Message-ID: <31D3D2F0.64E1@mcig.com> References: <4qku2p$447 AT pegasus DOT odyssee DOT net> NNTP-Posting-Host: pm177.smartlink.net Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: neligan AT odyssee DOT net DJ-Gateway: from newsgroup comp.os.msdos.djgpp Mitran Marcel wrote: > > Hi, > > I'm trying to write a simple program that hooks the timer interrupt in > C++. You shoulda thunk of that. What you need is a piece of code that associates a 'this' pointer for the interrupt handler object with the interrupt vector. Ofer Laor's ISC, (on Simtel mirrors everywhere) shows one way to do this in real mode. Basically, he builds in memory a short code sequence (called for historical reasons a thunk) which loads the this pointer and calls the void serve_interrupt(void) method. The key point is that the interrupt vector table entry is the _only_ context available at the time of the interrupt, and the only way to figure out which one got entered is to have each one point to different code, which loads a constant (e.g. the this pointer) which you want to associate with this interrupt. In DJGPP, things will be more complex; the memory in which the thunk is built must be writable at build time and executable at run time; it must be locked in memory; etc. etc. etc. Good luck!