Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- CA-Clipper 5.3 . Technical Reference - <b>exosegcsalias()</b> http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 ExoSegCSAlias()
 Creates a code descriptor for the given data segment
------------------------------------------------------------------------------
 C Prototype

     void *ExoSegCSAlias(void *pm_ptr)

 Returns

     This function returns a function pointer to the same linear address as
     pm_ptr, or NULL if an error occurred.

 Description

     The new descriptor created by ExoSegCSAlias points to the segment base
     of pm_ptr.  This function enables you to execute code in a data segment.
     To store data in a code segment, use ExoSegDSAlias().  Because
     ExoSegCSAlias() is run with interrupts enabled, realtime applications
     should not call it from an external interrupt handler.

     The offset of the alias will ALWAYS equal the offset of the original
     pointer.

     ExoFreeSelector() MUST be called to free the selector allocated with
     ExoSegCSAlias().  Selectors are a limited resource and repeated calls to
     ExoSegCSAlias() as well as ExoSegDSAlias() and ExoProtectedPtr() could
     use up all the available selectors causing the program to crash.  Once
     you are done with a pointer created with ExoSegCSAlias(), free the
     selector unless you will be using the pointer throughout the program.

 Examples

     This code fragment calls executable machine code written by the program
     to a data buffer.

     char writablecode[100];
     void (*funcptr(void));

     /* during execution the program would write executable machine
        code to the 100 byte writablecode buffer */

     /* create a selector that is a code segment alias to the data
        segment containing the variable writablecode */

     funcptr = ExoSegCSAlias(writablecode);

     /* set the offset of the function pointer to the offset of the
        writablecode buffer */
     FP_OFF(funcptr) = FP_OFF(writablecode);

     /* call the code written to the writablecode buffer */
     *funcptr();

     /* cancel the code segment selector */
     ExoFreeSelector(FP_SEG(funcptr));

 Files   Library is EXOSPACE.LIB, header file is Exospace.api.


See Also: ExoSegDSAlias()

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson