#include <stdio.h>
/* re: "Executable Strings" by James A. Kuzdrall in the May 1990 issue.
* It is possible to execute stings in any 80x86 memory model by
* casting the string to a far function pointer.
*
* Yours Truly,
*
* Rick Shide
* Moore Data Management
* S Hwy 100
* Minneapolis, MN 55416-1519
*/
/* asm equivalent of executable string setting return value to 5
*
* mov ax,5 ; B8 05 00
* ret ; CB
*/
typedef int (far *FPFI)(); // pointer to far function returning int
/* demonstrate executable strings
*/
main()
{
int i;
char *str;
/* immediate form
*/
i = ((FPFI)"\xb8\x05\x00\xcb")();
printf("%d\n", i); // will print "5"
/* string ptr form
*/
str = "\xb8\x34\x12\xcb";
i = ((FPFI)str)();
printf("0X%x\n", i); // will print "0X1234"
}