Beispiel #1
1
void main(uint32 kernel_image_size)
{
	puts("\nHello world\n", 30);
	puts("Shellcode OS is starting...\n", 30);

	CppInit();
	//callbios 要求内存地址位于1M一下,
	//因此,此处从栈(esp<0x00090000)中分配meminfo
	memory_info meminfo;
	uint32 memsize = get_mem_info(meminfo);

	printf("memsize=%08X(%dMb)\n", memsize, memsize >> 20);

	System.Init(kernel_image_size, &meminfo);
	uint32 system_stack = System.get_stack();
	__asm  mov esp, system_stack
	//
	//LIST<PROCESS>* process_list = new LIST<PROCESS>();
	//PROCESS* proc = new PROCESS();
	//printf("process_list=%08X process=%08X\n", process_list, (uint32)proc);
	//process_list->insert_head(proc);
	//process_list->remove_tail();
	//delete process_list;
	//delete proc;
	//load_minidump();
	//load_shellcode();
	//
	_enable();
	panic("");
	
	_enable();
	__asm jmp $
}
Beispiel #2
0
void InstallDOSIntercepts( void )
{
    int i;

    for( i = 0; i < next_intr; ++i ) {
        _disable();
        *old_intxx_handlers[i] = INT_LOCATE( intr_list[i] );
        INT_LOCATE( intr_list[i] ) = intxx_handlers[i];
        _enable();
    }
    _disable();

    old_int28 = INT_LOCATE( 0x28 );
    INT_LOCATE( 0x28 ) = &int28_handler;

    old_int21 = INT_LOCATE( 0x21 );
    INT_LOCATE( 0x21 ) = &int21_handler;

    old_int13 = INT_LOCATE( 0x13 );
    INT_LOCATE( 0x13 ) = &int13_handler;

    old_int03 = INT_LOCATE( 0x03 );
    INT_LOCATE( 0x03 ) = &int03_handler;

    _enable();
}
Beispiel #3
0
//컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴컴
//Procedure		InsertUIKey
//Author		Jim Taylor
//Date			Tue 30 Jan 1996
//
//Description	insert a key press/release event into the key queue
//
//Inputs		
//
//Returns	
//
//------------------------------------------------------------------------------
void	keytests::InsertUIKey(UIKeyNoMouse& keyfake)
{
UIKeyQueue*
	keyqueue=(UIKeyQueue*)	hitqueueui.flat;
	{	_disable();
int		oldadd=keyqueue->addref;
int		addref=oldadd+1;

		if (addref==keyqueue->queuesize)
		{
			addref=0;
		}
		if (addref==keyqueue->takeref)
		{
			_enable();											//JIM 21Oct96
			return;
		}
		keyqueue->keyqueue[oldadd].keycode=keyfake.keycode;
		keyqueue->keyqueue[oldadd].keyhit=keyfake.keyhit;
		if (keyfake.keyshifts)
			keyqueue->keyqueue[oldadd].keyshifts=keyfake.keyshifts;
		else
			keyqueue->keyqueue[oldadd].keyshifts=keyqueue->currshifts;
		keyqueue->keyqueue[oldadd].mousecoords=keyqueue->currmouse;
		keyqueue->addref=addref;
	}	_enable();
}
Beispiel #4
0
void main(void)
 {
   int i;

   // Zero the function counts
   for (i = 0; i < 255; i++)
     function[i] = 0;

   original_handler = _dos_getvect(0x21);
   _disable();
   _dos_setvect(0x21, handler);
   _enable();

   printf("This is a message\n");
   fprintf(stdout, "This is a second message\n");

   printf("Current disk is %c\n", getdisk() + 'A');

   _disable();
   _dos_setvect(0x21, original_handler);
   _enable();


   for (i = 0; i <= 255; i++)
     if (function[i])
       printf("Function %x called %d times\n", i, function[i]);
 }
Beispiel #5
0
void main(void)
 {
   void interrupt (*original_handler)();

   int old_count = 0;

   original_handler = _dos_getvect(5);

   _disable();  // Turn off interrupts during _dos_setvect
   _dos_setvect(5, handler);
   _enable();

   printf("Press Shift-PrtSc three times or any key to end\n");
     
   while (count < 3)
     if (count != old_count)
       {
         printf("Shift-PrtSc pressed\n");
         old_count = count;
       }
   
   _disable();
   _dos_setvect(5, original_handler);
   _enable();
 }
Beispiel #6
0
bool TestForBreak( void )
{
    _disable();
    if( BreakFlag || ( inp(LSR) & LSR_BRK ) ) {
        BreakFlag = 0;
        _enable();
        return( TRUE );
    }
    _enable();
    return( FALSE );
}
Beispiel #7
0
static void InitComPort()
{
    unsigned char st,i;
#define NEW_RESET

    inp(PortBase);
    inp(PortBase_5);

    _disable();
    st=inp(PortBase_3);
    outp(PortBase_3,st|0x80);    /* LCR : next is baud rate */
    //outpw(PortBase_1,0);
    outpw(PortBase,6);     // 19200=115200/6  /* Baud rate low byte */
    outp(PortBase_3,st);

    outp(PortBase_3,3);    // Dlab=0, no parity, 1 stop, 8 data
    _enable();

    st=inp(PortBase_2) & 0xc0;
    if(st==0xc0)
        outp(PortBase_2,0xc7);

#ifdef NEW_RESET
    outp(PortBase_2,0);
    outp(PortBase_1,0);
    st=inp(PortBase_4) & 0xef;
    outp(PortBase_4,st|0xb);
#endif

    inp(PortBase);
#ifdef NEW_RESET
    inp(PortBase_2);
#endif
    inp(PortBase_5);
    inp(PortBase_6);

    _disable();
    st=inp(0x21) & IntDisableMask;
#ifdef NEW_RESET
    outp(PortBase_1,0x7);
#else
    outp(PortBase_1,0x3);
#endif
    outp(PortBase_4,0xb);    // MCR: DTR=1, RTS=1
    outp(0x21,st);
    _enable();

    for (i=0; i<8; i++)                  /* Edge-triggering, read the ports */
        inp(PortBase + i);          /* Port to clear                   */
}
Beispiel #8
0
QueueItem::QueueItem( QueueMaster& master )
    : DataOStream()
    , _impl( new detail::QueueItem( master ))
{
    enableSave();
    _enable();
}
Beispiel #9
0
unsigned int key_get_shift_status()
{
	unsigned int shift_status = 0;

	_disable();

	key_clear_bios_buffer();

	if ( keyd_pressed[KEY_LSHIFT] || keyd_pressed[KEY_RSHIFT] )
		shift_status |= KEY_SHIFTED;

	if ( keyd_pressed[KEY_LALT] || keyd_pressed[KEY_RALT] )
		shift_status |= KEY_ALTED;

	if ( keyd_pressed[KEY_LCTRL] || keyd_pressed[KEY_RCTRL] )
		shift_status |= KEY_CTRLED;

#ifndef NDEBUG
	if (keyd_pressed[KEY_DELETE])
		shift_status |=KEY_DEBUGGED;
#endif

	_enable();

	return shift_status;
}
Beispiel #10
0
void RemoveDOSIntercepts( void )    /* will undo the above */
{
    int i;

    for( i = 0; i < next_intr; ++i ) {
        _disable();
        INT_LOCATE( intr_list[i] ) = *old_intxx_handlers[i];
        _enable();
    }
    _disable();
    INT_LOCATE( 0x21 ) = old_int21;
    INT_LOCATE( 0x28 ) = old_int28;
    INT_LOCATE( 0x13 ) = old_int13;
    INT_LOCATE( 0x03 ) = old_int03;
    _enable();
}
Beispiel #11
0
void CrystalLakeWriteMCP( ushort mc_addr, ubyte mc_data )
{
	_disable();
	outp( CL_MC0, 0xE2 );				// Write password
	outp( mc_addr, mc_data );		// Write data
	_enable();
}
Beispiel #12
0
void timer_exit(void)
{
    if (!timer_initialized)
        return;

    _disable();

    /* Reset channel 0 to square wave mode, 18.2 Hz. */

    outp(PIT_COMMAND, 54);
    outp(PIT_CH0_DATA, 0x00);
    outp(PIT_CH0_DATA, 0x00);

    _dos_setvect(PIT_SYSTEM_INT, timer.default_handler);

    _enable();

    if (dpmi_unlock_linear_region((uint32_t) &timer, sizeof(timer)) != 0)
        error("Unlocking timer data failed");

    if (dpmi_unlock_linear_region(
            (uint32_t) &timer_handler,
            (char *) timer_handler_end - (char *) timer_handler) != 0)
        error(" Unlocking timer interrupt handler failed");
}
Beispiel #13
0
static void
cmos_set(unsigned i, unsigned d) {
	_disable();
	chip_write8(0,i);
	chip_write8(1,d);
	_enable();	
}
Beispiel #14
0
void ftOutput (unsigned short port, unsigned char byte) {
#ifdef _WIN32
  int enabled = ftDisable && _disable();
#endif
  int data;
  int bit = 8;

  trace(1, ("output %03x", port));
  while (bit-- > 0) {
    data = triggerX|triggerY;
    if (byte & (1<<bit)) data |= dataOut;
    trace(2, (" >%02x", data));
    _outp(port, data); idle(ftIdle);
    data |= clock;
    trace(4, (" >%02x", data));
    _outp(port, data); idle(ftIdle);
  }
  data = triggerX|triggerY|loadOut|clock;
  trace(2, (" >%02x", data));
  _outp(port, data);
  trace(1, (" %02x\n", byte));
#ifdef _WIN32
  if (enabled) _enable();
#endif
}
Beispiel #15
0
KIRQL FASTCALL
KfRaiseIrql (KIRQL	NewIrql)
{
  KIRQL OldIrql;
  ULONG Flags;

  Flags = __readeflags();
  _disable();

  OldIrql = KeGetCurrentIrql ();

  if (NewIrql < OldIrql)
    {
      DPRINT1 ("CurrentIrql %x NewIrql %x\n", KeGetCurrentIrql (), NewIrql);
      ASSERT(FALSE);
    }


  if (NewIrql > DISPATCH_LEVEL)
    {
      APICWrite (APIC_TPR, IRQL2TPR(NewIrql) & APIC_TPR_PRI);
    }
  KeSetCurrentIrql (NewIrql);
  if (Flags & EFLAGS_INTERRUPT_MASK)
    {
      _enable();
    }

  return OldIrql;
}
Beispiel #16
0
VOID
NTAPI
INIT_FUNCTION
KiSystemStartupBootStack(VOID)
{
    PKTHREAD Thread;

    /* Initialize the kernel for the current CPU */
    KiInitializeKernel(&KiInitialProcess.Pcb,
                       (PKTHREAD)KeLoaderBlock->Thread,
                       (PVOID)(KeLoaderBlock->KernelStack & ~3),
                       (PKPRCB)__readfsdword(KPCR_PRCB),
                       KeNumberProcessors - 1,
                       KeLoaderBlock);

    /* Set the priority of this thread to 0 */
    Thread = KeGetCurrentThread();
    Thread->Priority = 0;

    /* Force interrupts enabled and lower IRQL back to DISPATCH_LEVEL */
    _enable();
    KfLowerIrql(DISPATCH_LEVEL);

    /* Set the right wait IRQL */
    Thread->WaitIrql = DISPATCH_LEVEL;

    /* Jump into the idle loop */
    KiIdleLoop();
}
Beispiel #17
0
/*-- return:
  1=time out, 0=ok
--------------*/
static int SendCmdChar(unsigned char ch)
{
    int n;

    if(fUseFlow==0)
    {
lbl_send:
        n=0x1ff;
        do {
            if( (inp(PortBase_5)&0x20) !=0 )
            {
                _disable();
                outp(PortBase,ch);
                _enable();
                return 0;
            }
            n--;
        } while(n);
        return 2;        /*- time out -*/
    }

    if(flowCtrl==XOFF)
        return 1;

    if( (inp(PortBase_6)&0x10) !=0 )
        goto lbl_send;

    return 1;
}
Beispiel #18
0
int ui_play_events_fast( int NumberOfEvents, UI_EVENT * buffer )
{
	int i;
	if ( buffer == NULL ) return 1;

	EventBuffer = buffer;
	FrameCount = 0;
	ui_event_counter = 0;
	ui_number_of_events = NumberOfEvents;
	Record = 3;
	_disable();
	keyd_last_released= 0;
	keyd_last_pressed= 0;

	//mprintf( 0, "Before: ", i );
	for (i=0; i<256; i++ )
	{
		//if (keyd_pressed[i]) mprintf( 0, "%d ", i );
		SavedState[i] = keyd_pressed[i];
	}
	//mprintf( 0, "\n" );
	_enable();
	key_flush();
	return 0;
}
Beispiel #19
0
PUBLIC void SER_InitComInterrupts(SER_PComPort p, void __interrupt (__far *isr)(void)) {
    byte t;
    assert(p != NULL);

        // Init interrupts.
    outp(p->port + SERR_IER, 0);
    t = inp(p->port + SERR_MCR);
    t |= SERR_MCR_OUT2;
    t &= ~SERR_MCR_LOOPBACK;
    outp(p->port + SERR_MCR, t);

    if (isr != NULL) {
            // Save previous vector and hook vector.
        p->oldint = _dos_getvect(p->irq + 8);
        _dos_setvect(p->irq + 8, isr);
    }
        // Setup comm interrupts.

    outp(0x21, inp(0x21) & ~(1 << p->irq)); // Mask in port's IRQ.
    _disable();
    outp(p->port + SERR_IER, SERR_IER_RXREADY | SERR_IER_TXREADY);
    outp(0x20, 0xC2);

        // Raise DTR
    outp(p->port + SERR_MCR, inp(p->port + SERR_MCR) | SERR_MCR_DTR);

    _enable();
}
Beispiel #20
0
QueueItem::QueueItem( const QueueItem& rhs )
    : DataOStream()
    , _impl( new detail::QueueItem( *rhs._impl ))
{
    enableSave();
    _enable();
}
Beispiel #21
0
void init_timer(int res_hz)
{
	_disable();

	if(res_hz > 0) {
		int reload_val = DIV_ROUND(OSC_FREQ_HZ, res_hz);
		set_timer_reload(reload_val);

		tick_interval = DIV_ROUND(1000, res_hz);
		ticks_per_dos_intr = DIV_ROUND(65535L, reload_val);

		inum = PIT_TIMER_INTR;
		prev_timer_intr = _dos_getvect(inum);
		_dos_setvect(inum, timer_irq);
	} else {
		tick_interval = 55;

		inum = DOS_TIMER_INTR;
		prev_timer_intr = _dos_getvect(inum);
		_dos_setvect(inum, dos_timer_intr);
	}
	_enable();

	atexit(cleanup);
}
Beispiel #22
0
unsigned ftAnalog (unsigned short port, int nTrigger) {
  unsigned result = 0;
#ifdef _WIN32
  unsigned short status = port+1;
  int enabled = ftDisable && _disable();
#endif
#ifdef SC12
  unsigned short status = port;
#endif
  int data = (nTrigger ? triggerX : triggerY)|clock;
  if (ftLoadOut) data |= loadOut;

  trace(64, ("analog %03x", port));
  trace(128, (" >%02x", data));
  _outp(port, data); idle(ftIdle);
  data = triggerX|triggerY|clock;
  if (ftLoadOut) data |= loadOut;
  trace(128, (" >%02x", data));
  _outp(port, data);
  while (_inp(status) & busy) ++ result, idle(ftScale);
  trace(64, (" %u\n", result));
#ifdef _WIN32
  if (enabled) _enable();
#endif
  return result;
}
Beispiel #23
0
char *InitSys( void )
{
    int i8259_val;                  /* storing I8259 value */
    int i8259m_val;                 /* storing I8259 mask register value */

    inp( IOBase );                 /* base com port: clear any characters */
    outp( IER, 0 );                /* ier <= 0 : no ints for now */
    inp( MSR );                    /* MSR : reset MSR now */

    InitInts();

    outp( LCR, LCR_SETUP );                /* set com line characteristics */
    outp( MCR, MCR_SETUP );                /* set MCR value */
    outp( IER, 0x05 );                     /* set ier, allow lsr & rx ints */

    _disable();
    i8259m_val = inp( I8259M );            /* set 8259 mask register    */
    I8259mBit = i8259m_val & ( 1 << IntVector );
    i8259m_val &= ~( 1 << IntVector );    /*    to allow com interrupts */
    outp( I8259M, i8259m_val );
    _enable();
    i8259_val = IntVector;                 /* set 8259 priority */
    --i8259_val;
    i8259_val |= 0xc0;
    outp( I8259, i8259_val );
    CurrentBaud = -1;
    Modem = 0;
    return( NULL );
}
void ObjectDataOStream::enableCommit( const uint128_t& version,
                                      const Nodes& receivers )
{
    _version = version;
    _setupConnections( receivers );
    _enable();
}
Beispiel #25
0
bool Baud( int index )
{
    int lcr_value;

    ErrorFlag = 0;
    BreakFlag = 0;
    if( index == MIN_BAUD ) {
        Modem = 1;
        return( TRUE );
    }
    Modem = 0;
    if( index == CurrentBaud ) return( TRUE );

    /* don't change baud rate while a character is still being sent */
    do {} while( (inp( LSR ) & LSR_TSRE) == 0 );
    lcr_value = inp( LCR );              /* get LCR value */
    _disable();                          /* disable interrupt */
    outp( LCR, lcr_value | LCR_DLAB );   /* set Divisor Latch Access Bit(DLAB)*/
                                         /*  to enable setting of baud rate */
    outp( IOBase, Divisor[index] );      /* LSB portion of new divisor */
    outp( IOBase+1, 0 );                 /* MSB portion of new divisor */
    lcr_value = inp( LCR );
    outp( LCR, lcr_value & ~LCR_DLAB );  /* set off DLAB bit of LCR */
    _enable();                           /* re-enable interrupts */
    CurrentBaud = index;
    return( TRUE );
}
Beispiel #26
0
int kb_init(int bufsz)
{
	if(DONE_INIT) {
		fprintf(stderr, "keyboard driver already initialized!\n");
		return 0;
	}

	buffer_size = bufsz;
	if(buffer_size && !(buffer = malloc(buffer_size * sizeof *buffer))) {
		fprintf(stderr, "failed to allocate input buffer, continuing without\n");
		buffer_size = 0;
	}
	buf_ridx = buf_widx = 0;
	last_key = -1;

	memset(keystate, 0, sizeof keystate);
	num_pressed = 0;

	/* set our interrupt handler */
	_disable();
	prev_handler = _dos_getvect(KB_INTR);
	_dos_setvect(KB_INTR, kbintr);
	_enable();

	return 0;
}
Beispiel #27
0
/* initialize interruption vectors */ 
void init()
{
  /* save standart master IRQ vectors */
  std_int8 = getvect(0x08);
  std_int9 = getvect(0x09);
  std_int10 = getvect(0x0A);
  std_int11 = getvect(0x0B);
  std_int12 = getvect(0x0C);
  std_int13 = getvect(0x0D);
  std_int14 = getvect(0x0E);
  std_int15 = getvect(0x0F);

  /* set new master IRQ interruptions*/
  
  setvect(0x08, new_int8);
  setvect(0x09, new_int9);
  setvect(0x0A, new_int10);
  setvect(0x0B, new_int11);
  setvect(0x0C, new_int12);
  setvect(0x0D, new_int13);
  setvect(0x0E, new_int14);
  setvect(0x0F, new_int15);

  /* save standart slave IRQ vectors*/
  std_int70 = getvect(0x70);
  std_int71 = getvect(0x71);
  std_int72 = getvect(0x72);
  std_int73 = getvect(0x73);
  std_int74 = getvect(0x74);
  std_int75 = getvect(0x75);
  std_int76 = getvect(0x76);
  std_int77 = getvect(0x77);

  /* set new slave IRQ interruptions*/
  setvect(0x90, new_int70);
  setvect(0x91, new_int71);
  setvect(0x92, new_int72);
  setvect(0x93, new_int73);
  setvect(0x94, new_int74);
  setvect(0x95, new_int75);
  setvect(0x96, new_int76);
  setvect(0x97, new_int77);

  /* make operations atomic */ 
  _disable();


  outp(0x20,0x11);		// send ICW1
  outp(0x21,0x08);		// send ICW2
  outp(0x21,0x04);		// send ICW3
  outp(0x21,0x01);		// send ICW4


  outp(0xA0,0x11);		// same above
  outp(0xA1,0x90);
  outp(0xA1,0x02);
  outp(0xA1,0x01);

  _enable();
}
Beispiel #28
0
void key_flush()
{
	int i;
	fix CurTime;

	_disable();

	// Clear the BIOS buffer
	key_clear_bios_buffer();

	key_data.keyhead = key_data.keytail = 0;

	//Clear the keyboard buffer
	for (i=0; i<KEY_BUFFER_SIZE; i++ )	{
		key_data.keybuffer[i] = 0;
		key_data.time_pressed[i] = 0;
	}
	
	//Clear the keyboard array

	CurTime =timer_get_fixed_secondsX();

	for (i=0; i<256; i++ )	{
		keyd_pressed[i] = 0;
		key_data.TimeKeyWentDown[i] = CurTime;
		key_data.TimeKeyHeldDown[i] = 0;
		key_data.NumDowns[i]=0;
		key_data.NumUps[i]=0;
	}
	_enable();
}
Beispiel #29
0
/*
 * @implemented
 */
VOID
NTAPI
HalProcessorIdle(VOID)
{
    /* Enable interrupts and halt the processor */
    _enable();
}
Beispiel #30
0
/*---------------------------------------------------------------------
	Function:	InterruptInit
	Purpose:	Initialisation of interrupt handling
	Arguments:	void
	Return:		void
---------------------------------------------------------------------*/
void InterruptInit(void)
{
	/* initialise vector tables */
	_init_vectab();
	/* enable external interrupts */
	_enable();
}