Date: Wed, 16 Aug 2000 15:16:10 +0200 From: "Eli Zaretskii" Sender: halo1 AT zahav DOT net DOT il To: r_maj AT poczta DOT onet DOT pl Message-Id: <2950-Wed16Aug2000151610+0300-eliz@is.elta.co.il> X-Mailer: Emacs 20.6 (via feedmail 8.2.emacs20_6 I) and Blat ver 1.8.5b CC: djgpp AT delorie DOT com In-reply-to: <8ndkeb$lt8$5@info.cyf-kr.edu.pl> (r_maj@poczta.onet.pl) Subject: Re: calling functions References: <8ndkeb$lt8$5 AT info DOT cyf-kr DOT edu DOT pl> Reply-To: djgpp AT delorie DOT com Errors-To: nobody AT delorie DOT com X-Mailing-List: djgpp AT delorie DOT com X-Unsubscribes-To: listserv AT delorie DOT com Precedence: bulk > From: "Rafal Maj" > Newsgroups: comp.os.msdos.djgpp > Date: Wed, 16 Aug 2000 10:44:44 +0200 > > long int size = ((long int)(void*)fun_end) - ((long int)(void*)fun); > char *ptr = new char[size]; > memcpy(ptr,(void*)fun,size); > > void (*function_ptr)() = (void (*)()) ptr; > > (*function_ptr)(); // <------ CALL of function copy This is not supposed to work. You are in protected mode, where code and data have different protection bits. In particularly, you are forbidden from calling code that sits in a data buffer. This happens because data and code are accessed using different selectors with different access rights. Why would you want to do anything crazy like that, anyway? The fact that your first program works is pure coincidence, due to the peculiar memory layout of DJGPP program. This is too complicated to explain; if you really want to dig into this, I suggest a good book about x86 protected-mode programming, or the relevant parts of the Intel Pentium manuals. > So, can You send me working example, how to call copy of functions ? > I know it's possible, because Allegro is using stuf like this. Copy the code from Allegro more faithfully, and it will work for you as well.