annotate test/testloadso.c @ 4355:9b464226e541 SDL-1.2

Fixed bug #855 Ludwig Nussel 2009-10-18 06:31:52 PDT an mprotect call was added to fix bug 528. However that results in a buffer that allows writing and code execution. Ie the no-execute security features of modern operating systems are defeated this way. Two mprotect calls are needed. One to make the buffer executable but not writeable when done and another one to make the buffer writeable again if the content needs to be changed.
author Sam Lantinga <slouken@libsdl.org>
date Sun, 18 Oct 2009 17:31:37 +0000
parents f1699aecb65d
children 2c835d58faad
rev   line source
3892
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
1
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
2 /* Test program to test dynamic loading with the loadso subsystem.
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
3 */
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
4
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
5 #include <stdio.h>
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
6 #include <stdlib.h>
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
7
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
8 #include "SDL.h"
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
9
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
10 typedef int (*fntype)(const char *);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
11
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
12 int main(int argc, char *argv[])
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
13 {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
14 int retval = 0;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
15 int hello = 0;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
16 const char *libname = NULL;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
17 const char *symname = NULL;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
18 void *lib = NULL;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
19 fntype fn = NULL;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
20
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
21 if (argc != 3) {
3893
f1699aecb65d Man, who let this moron near printf()?! :)
Ryan C. Gordon <icculus@icculus.org>
parents: 3892
diff changeset
22 const char *app = argv[0];
f1699aecb65d Man, who let this moron near printf()?! :)
Ryan C. Gordon <icculus@icculus.org>
parents: 3892
diff changeset
23 fprintf(stderr, "USAGE: %s <library> <functionname>\n", app);
f1699aecb65d Man, who let this moron near printf()?! :)
Ryan C. Gordon <icculus@icculus.org>
parents: 3892
diff changeset
24 fprintf(stderr, " %s --hello <lib with puts()>\n", app);
3892
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
25 return 1;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
26 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
27
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
28 /* Initialize SDL */
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
29 if ( SDL_Init(0) < 0 ) {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
30 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
31 return 2;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
32 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
33
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
34 if (strcmp(argv[1], "--hello") == 0) {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
35 hello = 1;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
36 libname = argv[2];
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
37 symname = "puts";
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
38 } else {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
39 libname = argv[1];
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
40 symname = argv[2];
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
41 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
42
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
43 lib = SDL_LoadObject(libname);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
44 if (lib == NULL) {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
45 fprintf(stderr, "SDL_LoadObject('%s') failed: %s\n",
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
46 libname, SDL_GetError());
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
47 retval = 3;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
48 } else {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
49 fn = (fntype) SDL_LoadFunction(lib, symname);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
50 if (fn == NULL) {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
51 fprintf(stderr, "SDL_LoadFunction('%s') failed: %s\n",
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
52 symname, SDL_GetError());
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
53 retval = 4;
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
54 } else {
3893
f1699aecb65d Man, who let this moron near printf()?! :)
Ryan C. Gordon <icculus@icculus.org>
parents: 3892
diff changeset
55 printf("Found %s in %s at %p\n", symname, libname, fn);
3892
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
56 if (hello) {
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
57 printf("Calling function...\n");
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
58 fflush(stdout);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
59 fn(" HELLO, WORLD!\n");
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
60 printf("...apparently, we survived. :)\n");
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
61 printf("Unloading library...\n");
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
62 fflush(stdout);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
63 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
64 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
65 SDL_UnloadObject(lib);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
66 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
67 SDL_Quit();
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
68 return(0);
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
69 }
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
70
b25dd008167b Added a test program for loadso subsystem.
Ryan C. Gordon <icculus@icculus.org>
parents:
diff changeset
71