(3b2) functions in data space
Daniel R. Levy
levy at ttrdc.UUCP
Tue Mar 18 13:32:29 AEST 1986
<Oh oh here it comes. Watch out boy, it'll chew you up! \
Oh oh here it comes. The LINE EATER! [Line eater]>
In article <622 at bentley.UUCP>, kwh at bentley.UUCP (KW Heuer) writes:
>I've changed the cross-posting from net.unix to net.unix-wizards, as
>this is no longer a neophyte question.
>...
>The person who started this discussion was already able to create code
>in the .data space; whether it's done by the loader or at run-time by
>the program is irrelevant. The question is whether it's possible to
>_execute_ such a function. On a vax, you can. On a pdp11 with split
>I/D, you can't, because .text and .data addresses are each 16 bits,
>so an attempt to call a function from .data space will actually call
>the function at the same address in .text space. (The workaround is
>to use ld -N, so you don't have split I/D.) The remainder of this
>discussion focuses on the 3b2, where .text and .data addresses have
>separate ranges (.text normally starts at 0x80800000, .data at
>0x80880000).
>[more discussion, speculation]
Well, it IS possible on the 3b2 and very simply. Not only is it
possible to read text space but it is also possible to run data space.
Here's a quickie program which works on the 3b2:
main()
{
char arr[100]; /* needn't be nearly this big but what the heck */
void hello();
charcopy(hello,arr,100);
printf("I've now copied text space to data space.\n");
run(arr);
printf("I've now run data space.\n");
}
void hello()
{
printf("Hello world\n");
}
charcopy(a,b,c)
char *a, *b;
int c;
{
while (c--) *b++ = *a++;
}
run(stuff)
char (*stuff)();
{
(*stuff)();
}
Now maybe some pundit out there can explain WHY this works :-).
--
------------------------------- Disclaimer: The views contained herein are
| dan levy | yvel nad | my own and are not at all those of my em-
| an engihacker @ | ployer or the administrator of any computer
| at&t computer systems division | upon which I may hack.
| skokie, illinois |
-------------------------------- Path: ..!{akgua,homxb,ihnp4,ltuxa,mvuxa,
vax135}!ttrdc!levy
More information about the Comp.lang.c
mailing list