<<< NOTED::NOTES$7:[NOTES$LIBRARY]HACKERS.NOTE;1 >>> -< ** Hackers ** >- ================================================================================ Note 1832.13 ldr$unload_image 13 of 15 UTRTSC::VDBURG "Change mode to PANIC" 81 lines 27-MAR-1997 01:40 -< SMONUNLOAD.C >- -------------------------------------------------------------------------------- #include #include #include #include #include #include #define IMAGE "SMON.EXE" #define TABLE "LNM$SYSTEM_TABLE" #define LOGNAM "SMON$HANDLE" typedef struct itmlst { short size; short item; char *buffer; short *retlen; } ITEMS; int ldr$unload_image(); int main() { int stat; unsigned int handle[3]; unsigned int arglist[3]; $DESCRIPTOR(imgdsc,IMAGE); $DESCRIPTOR(tblname,TABLE); $DESCRIPTOR(logname,LOGNAM); ITEMS lnmlst[7]; char h1[9], h2[9], h3[9]; short l1, l2, l3; int idx1, idx2, idx3; idx1 = 0; idx2 = 1; idx3 = 2; lnmlst[0].size = 4; lnmlst[0].item = LNM$_INDEX; lnmlst[0].buffer = (char *) &idx1; lnmlst[0].retlen = 0; lnmlst[1].size = 8; lnmlst[1].item = LNM$_STRING; lnmlst[1].buffer = h1; lnmlst[1].retlen = &l1; lnmlst[2].size = 4; lnmlst[2].item = LNM$_INDEX; lnmlst[2].buffer = (char *) &idx2; lnmlst[2].retlen = 0; lnmlst[3].size = 8; lnmlst[3].item = LNM$_STRING; lnmlst[3].buffer = h2; lnmlst[3].retlen = &l2; lnmlst[4].size = 4; lnmlst[4].item = LNM$_INDEX; lnmlst[4].buffer = (char *) &idx3; lnmlst[4].retlen = 0; lnmlst[5].size = 8; lnmlst[5].item = LNM$_STRING; lnmlst[5].buffer = h3; lnmlst[5].retlen = &l3; lnmlst[6].size = 0; lnmlst[6].item = 0; stat = sys$trnlnm(0,&tblname,&logname,&PSL$C_EXEC,&lnmlst); if (!(stat & 1)) lib$stop(stat); h1[l1] = '\0'; h2[l2] = '\0'; h3[l3] = '\0'; sscanf(h1,"%x",&handle[0]); sscanf(h2,"%x",&handle[1]); sscanf(h3,"%x",&handle[2]); arglist[0] = 2; arglist[1] = (int) &imgdsc; arglist[2] = (int) handle; stat = sys$cmkrnl(&ldr$unload_image,arglist); if (!(stat & 1)) lib$stop(stat); stat = sys$dellnm(&tblname,&logname,&PSL$C_EXEC); if (!(stat & 1)) lib$stop(stat); }