Changeset 5202 for trunk/src


Ignore:
Timestamp:
Feb 20, 2001, 5:58:33 AM (25 years ago)
Author:
bird
Message:

Added recognization of enter and exist kernel functions.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/win32k/dev32/d32init.c

    r5119 r5202  
    1 /* $Id: d32init.c,v 1.35 2001-02-11 23:44:38 bird Exp $
     1/* $Id: d32init.c,v 1.36 2001-02-20 04:58:33 bird Exp $
    22 *
    33 * d32init.c - 32-bits init routines.
     
    777777     *     push edi
    778778     *     mov eax, dword ptr [xxxxxxxx]
    779      *
     779     *  or
     780     *     movzx esp, sp
     781     *  or
     782     *     call rel32
     783     *     popf
    780784     */
    781785    if ((pach[0] == 0x55 && (pach[1] == 0x8b || pach[1] == 0xa1)) /* the two first prologs */
     
    801805        (pach[0] == 0xa1 && !fOverload) /* the next prolog */
    802806        ||
    803         (pach[0] == 0x57 &&  pach[1] == 0x8b && !fOverload) /* the last prolog */
     807        (pach[0] == 0x57 &&  pach[1] == 0x8b && !fOverload) /* the next prolog */
     808        ||
     809        (pach[0] == 0x0f &&  pach[1] == 0xb7 && pach[2] == 0xe4 && !fOverload) /* the next prolog */
     810        ||
     811        (pach[0] == 0xe8 &&  pach[5] == 0x9d && !fOverload) /* the last prolog */
    804812        )
    805813    {
     
    815823            switch (*pach)
    816824            {
     825                case 0x0f:
     826                    if (pach[1] != 0xb7 && pach[2] != 0xe4) /* movzx esp, sp */
     827                    {
     828                        kprintf(("interpretFunctionProlog32: unknown instruction 0x%x 0x%x 0x%x\n", pach[0], pach[1], pach[2]));
     829                        return -11;
     830                    }
     831                    pach += 2;
     832                    cb += 2;
     833                    break;
     834
     835
    817836                /* simple one byte prefixes */
    818837                case 0x2e:              /* cs segment override */
     
    839858                case 0x56:              /* push si */
    840859                case 0x57:              /* push di */
     860                case 0x06:              /* push es */
     861                case 0x0e:              /* push cs */
     862                case 0x1e:              /* push ds */
     863                case 0x16:              /* push ss */
    841864                    break;
    842865
     
    877900                    pach += cbWord;
    878901                    cb += cbWord;
     902                    break;
     903
     904                /* fixed five byte instructions */
     905                case 0xe8:              /* call imm32 */
     906                    pach =+ 4;
     907                    cb =+ 4;
    879908                    break;
    880909
Note: See TracChangeset for help on using the changeset viewer.