从ACPI!ParseArg函数中的ACPI!Buffer和ACPI!ParseOpcode到ACPI!Name中的ACPI!MoveObjData

从ACPI!ParseArg函数中的ACPI!Buffer和ACPI!ParseOpcode到ACPI!Name中的ACPI!MoveObjData

0: kd> t
Breakpoint 9 hit
eax=00000000 ebx=899b23cc ecx=899b23cc edx=00000000 esi=00000043 edi=8997c000
eip=f74271e8 esp=f789a0f4 ebp=f789a110 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!ParseOpcode:
f74271e8 55 push ebp
0: kd> kc
#
00 ACPI!ParseOpcode
01 ACPI!ParseArg
02 ACPI!ParseTerm
03 ACPI!RunContext
04 ACPI!InsertReadyQueue
05 ACPI!RestartContext
06 ACPI!SyncLoadDDB
07 ACPI!AMLILoadDDB
08 ACPI!ACPIInitializeDDB

0: kd> dd 0x8997c03c
8997c03c f74c8cee 00000000 00000000 00000000
8997c04c 00000000 00000000 f741eeb5 00000000
8997c05c f789a1bc 000a0008 00000000 8997c068
8997c06c 8997c068 00000000 00000000 00000000
8997c07c 00000000 00000000 00000000 01000013
8997c08c 00000000 00000000 f741eff5 8997c000
8997c09c 00000000 00000000 00000000 899af000
8997c0ac 00000000 00000000 00000000 00000000
0: kd> db f74c8cee
f74c8cee 0a b2 47 01 10 00 10 00-01 10 47 01 24 00 24 00 ..G.......G.$.$.
f74c8cfe 01 02 47 01 28 00 28 00-01 02 47 01 2c 00 2c 00 ..G.(.(...G.,.,.
f74c8d0e 01 02 47 01 2e 00 2e 00-01 02 47 01 30 00 30 00 ..G.......G.0.0.
f74c8d1e 01 02 47 01 34 00 34 00-01 02 47 01 38 00 38 00 ..G.4.4...G.8.8.
f74c8d2e 01 02 47 01 3c 00 3c 00-01 02 47 01 50 00 50 00 ..G.<.<...G.P.P.
f74c8d3e 01 04 47 01 72 00 72 00-01 06 47 01 80 00 80 00 ..G.r.r...G.....
f74c8d4e 01 01 47 01 90 00 90 00-01 10 47 01 a4 00 a4 00 ..G.......G.....
f74c8d5e 01 02 47 01 a8 00 a8 00-01 02 47 01 ac 00 ac 00 ..G.......G.....


0: kd> db f74c8cee-10
f74c8cde 02 08 5f 55 49 44 0a 1f-08 52 53 52 43 11 46 0b .._UID...RSRC.F.
f74c8cee 0a b2 47 01 10 00 10 00-01 10 47 01 24 00 24 00 ..G.......G.$.$.
f74c8cfe 01 02 47 01 28 00 28 00-01 02 47 01 2c 00 2c 00 ..G.(.(...G.,.,.
f74c8d0e 01 02 47 01 2e 00 2e 00-01 02 47 01 30 00 30 00 ..G.......G.0.0.

opcode先是11后是0a

0a获得ACPI!_amlterm。b2是缓冲区的长度。


0: kd> x acpi!OpcodeTable
f74396b0 ACPI!OpcodeTable = struct _amlterm *[256]
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_amlterm * (*)[256])0xf74396b0))
(*((ACPI!_amlterm * (*)[256])0xf74396b0)) [Type: _amlterm * [256]]
[0] : 0xf7439610 [Type: _amlterm *]

[10] : 0xf7439610 [Type: _amlterm *]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_amlterm *)0xf7439610)
((ACPI!_amlterm *)0xf7439610) : 0xf7439610 [Type: _amlterm *]
[+0x000] pszTermName : 0x0 [Type: char *]
[+0x004] dwOpcode : 0xffffffff [Type: unsigned long]
[+0x008] pszArgTypes : 0x0 [Type: char *]
[+0x00c] dwTermClass : 0x5 [Type: unsigned long]
[+0x010] dwfOpcode : 0x8 [Type: unsigned long]
[+0x014] pfnCallBack : 0x0 [Type: long (__cdecl*)(unsigned long,unsigned long,_NSObj *,unsigned long)]
[+0x018] dwCBData : 0x0 [Type: unsigned long]
[+0x01c] pfnOpcode : 0x0 [Type: long (__cdecl*)()]

#define OF_DATA_OBJECT 0x00000008

回顾:

if (pterm->pdataArgs != NULL)
{
FreeDataBuffs(pterm->pdataArgs, pterm->icArgs);
FREEODOBJ(pterm->pdataArgs);
}
PopFrame(pctxt);
}

EXIT(2, ("ParseTerm=%x\n", rc));
return rc;
} //ParseTerm


0: kd> t
eax=899b23cc ebx=8997c000 ecx=00000000 edx=000000b2 esi=8997dd34 edi=00000000
eip=f741bda6 esp=f789a118 ebp=f789a130 iopl=0 nv up ei ng nz na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000286
ACPI!FreeDataBuffs:
f741bda6 55 push ebp
0: kd> dv
adata = 0x899b23cc
icData = 0n1
i = 0n8
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ObjData *)0x899b23cc)
((ACPI!_ObjData *)0x899b23cc) : 0x899b23cc [Type: _ObjData *]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x1 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0xb2 [Type: unsigned long]
[+0x008] uipDataValue : 0xb2 [Type: unsigned long]
[+0x008] pnsAlias : 0xb2 [Type: _NSObj *]
[+0x008] pdataAlias : 0xb2 [Type: _ObjData *]
[+0x008] powner : 0xb2 [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]

0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997dd34
rc = 0n0
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997dd34)
((ACPI!_term *)0x8997dd34) : 0x8997dd34 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c8ceb : 0x11 [Type: unsigned char *]
[+0x014] pbOpEnd : 0xf74c8da2 : 0x14 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0x0 [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7439190 [Type: _amlterm *]
[+0x020] pnsObj : 0x0 [Type: _NSObj *]
[+0x024] iArg : 1 [Type: int]
[+0x028] icArgs : 1 [Type: int]
[+0x02c] pdataArgs : 0x899b23cc [Type: _ObjData *]
[+0x030] pdataResult : 0x899b2214 [Type: _ObjData *]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ObjData *)0x899b23cc)
((ACPI!_ObjData *)0x899b23cc) : 0x899b23cc [Type: _ObjData *]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x0 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x0 [Type: unsigned long]
[+0x008] uipDataValue : 0x0 [Type: unsigned long]
[+0x008] pnsAlias : 0x0 [Type: _NSObj *]
[+0x008] pdataAlias : 0x0 [Type: _ObjData *]
[+0x008] powner : 0x0 [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ObjData *)0x899b2214)
((ACPI!_ObjData *)0x899b2214) : 0x899b2214 [Type: _ObjData *]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x3 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x0 [Type: unsigned long]
[+0x008] uipDataValue : 0x0 [Type: unsigned long]
[+0x008] pnsAlias : 0x0 [Type: _NSObj *]
[+0x008] pdataAlias : 0x0 [Type: _ObjData *]
[+0x008] powner : 0x0 [Type: void *]
[+0x00c] dwDataLen : 0xb2 [Type: unsigned long]
[+0x010] pbDataBuff : 0x899b23ec : 0x47 [Type: unsigned char *]


FREEODOBJ(pterm->pdataArgs);

VOID LOCAL PopFrame(PCTXT pctxt)
{
TRACENAME("POPFRAME")

ENTER(2, ("PopFrame(pctxt=%p)\n", pctxt));

ASSERT(!IsStackEmpty(pctxt));
ASSERT(((PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd)->dwSig != 0);
pctxt->LocalHeap.pbHeapEnd +=
((PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd)->dwLen;

EXIT(2, ("PopFrame! (StackTop=%p)\n", pctxt->LocalHeap.pbHeapEnd));
} //PopFrame


记住:pterm = 0x8997dd34
0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997dd34
rc = 0n0
记住:

while (!IsStackEmpty(pctxt))
{
CHKDEBUGGERREQ();
pfh = (PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd;
ASSERT(pfh->pfnParse != NULL);

rc = pfh->pfnParse(pctxt, pfh, rc);
if ((rc == AMLISTA_PENDING) || (rc == AMLISTA_DONE))
{
break;
}
}

0: kd> kc
#
00 ACPI!ParseTerm
01 ACPI!RunContext
02 ACPI!InsertReadyQueue
03 ACPI!RestartContext
04 ACPI!SyncLoadDDB
05 ACPI!AMLILoadDDB
06 ACPI!ACPIInitializeDDB
07 ACPI!ACPIInitializeDDBs
08 ACPI!ACPIInitialize
09 ACPI!ACPIInitStartACPI
0a ACPI!ACPIRootIrpStartDevice
0b ACPI!ACPIDispatchIrp
0c nt!IofCallDriver
0d nt!IopSynchronousCall
0e nt!IopStartDevice
0f nt!PipProcessStartPhase1
10 nt!PipProcessDevNodeTree
11 nt!PipDeviceActionWorker
12 nt!PipRequestDeviceAction
13 nt!IopInitializeBootDrivers
14 nt!IoInitSystem
15 nt!Phase1Initialization
16 nt!PspSystemThreadStartup
17 nt!KiThreadStartup
0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997dd68
rc = 0n0
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997dd68)
((ACPI!_term *)0x8997dd68) : 0x8997dd68 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c8ce6 : 0x8 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0xf74c8e19 : 0x5b [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7438cf0 [Type: _amlterm *]
[+0x020] pnsObj : 0x0 [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int] 返回中。。。
[+0x02c] pdataArgs : 0x899b2200 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c040 [Type: _ObjData *]

没有:
if (pterm->pamlterm->dwfOpcode & OF_VARIABLE_LIST)
{
ParsePackageLen(&pctxt->pbOp, &pterm->pbOpEnd);
}


没有:
rc = ParseArg(pctxt, pterm->pamlterm->pszArgTypes[i],
&pterm->pdataArgs[i]);


if (pterm->pamlterm->pfnOpcode != NULL)
{
if (((rc = pterm->pamlterm->pfnOpcode(pctxt, pterm)) !=
STATUS_SUCCESS) ||
(&pterm->FrameHdr != (PFRAMEHDR)pctxt->LocalHeap.pbHeapEnd))
{
break;
}


0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997dd68


0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
[+0x000] dwSig : 0x54585443 [Type: unsigned long]
[+0x004] pbCtxtEnd : 0x8997e000 : 0x54 [Type: unsigned char *]
[+0x008] listCtxt [Type: _List]
[+0x010] listQueue [Type: _List]
[+0x018] pplistCtxtQueue : 0x0 [Type: _List * *]
[+0x01c] plistResources : 0x0 [Type: _List *]
[+0x020] dwfCtxt : 0x10 [Type: unsigned long]
[+0x024] pnsObj : 0x0 [Type: _NSObj *]
[+0x028] pnsScope : 0x899b2300 [Type: _NSObj *]
[+0x02c] powner : 0x899af330 [Type: _objowner *]
[+0x030] pcall : 0x8997df34 [Type: _call *]
[+0x034] pnctxt : 0x0 [Type: _nestedctxt *]
[+0x038] dwSyncLevel : 0x0 [Type: unsigned long]
[+0x03c] pbOp : 0xf74c8da2 : 0x14 [Type: unsigned char *]
[+0x040] Result [Type: _ObjData]
[+0x054] pfnAsyncCallBack : 0xf741eeb5 [Type: void (__cdecl*)(_NSObj *,long,_ObjData *,void *)]
[+0x058] pdataCallBack : 0x0 [Type: _ObjData *]
[+0x05c] pvContext : 0xf789a1bc [Type: void *]
[+0x060] Timer [Type: _KTIMER]
[+0x088] Dpc [Type: _KDPC]
[+0x0a8] pheapCurrent : 0x899af000 [Type: _heap *]
[+0x0ac] CtxtData [Type: _ctxtdata]
[+0x0bc] LocalHeap [Type: _heap]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899b2300)
((ACPI!_NSObj *)0x899b2300) : 0x899b2300 [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899b2278 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x899b2344 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x4452424d [Type: unsigned long]
[+0x014] hOwner : 0x899af330 [Type: void *]
[+0x018] pnsOwnedNext : 0x899b22bc [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x899c0920 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b231c))
(*((ACPI!_ObjData *)0x899b231c)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x6 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x0 [Type: unsigned long]
[+0x008] uipDataValue : 0x0 [Type: unsigned long]
[+0x008] pnsAlias : 0x0 [Type: _NSObj *]
[+0x008] pdataAlias : 0x0 [Type: _ObjData *]
[+0x008] powner : 0x0 [Type: void *]
[+0x00c] dwDataLen : 0x0 [Type: unsigned long]
[+0x010] pbDataBuff : 0x0 [Type: unsigned char *]
0: kd> db 0x899b2300
899b2300 bc 22 9b 89 bc 22 9b 89-78 22 9b 89 44 23 9b 89 ."..."..x"..D#..
899b2310 4d 42 52 44 30 f3 9a 89-bc 22 9b 89 00 00 06 00 MBRD0...."......
899b2320 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
899b2330 20 09 9c 89 00 00 00 00-48 4e 53 4f 44 00 00 00 .......HNSOD...
899b2340 00 f0 9a 89 88 23 9b 89-88 23 9b 89 00 23 9b 89 .....#...#...#..
899b2350 00 00 00 00 5f 48 49 44-30 f3 9a 89 00 23 9b 89 ...._HID0....#..
899b2360 00 00 01 00 00 00 00 00-41 d0 0c 02 00 00 00 00 ........A.......
899b2370 00 00 00 00 00 00 00 00-00 00 00 00 48 4e 53 4f ............HNSO
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899b2344)
((ACPI!_NSObj *)0x899b2344) : 0x899b2344 [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899b2300 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x0 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x4449485f [Type: unsigned long]
[+0x014] hOwner : 0x899af330 [Type: void *]
[+0x018] pnsOwnedNext : 0x899b2300 [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x0 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_List *)0x899b2344))
(*((ACPI!_List *)0x899b2344)) [Type: _List]
[+0x000] plistPrev : 0x899b2388 [Type: _List *]
[+0x004] plistNext : 0x899b2388 [Type: _List *]
0: kd> db 0x899b2344
899b2344 88 23 9b 89 88 23 9b 89-00 23 9b 89 00 00 00 00 .#...#...#......
899b2354 5f 48 49 44 30 f3 9a 89-00 23 9b 89 00 00 01 00 _HID0....#......
899b2364 00 00 00 00 41 d0 0c 02-00 00 00 00 00 00 00 00 ....A...........
899b2374 00 00 00 00 00 00 00 00-48 4e 53 4f 44 00 00 00 ........HNSOD...
899b2384 00 f0 9a 89 44 23 9b 89-44 23 9b 89 00 23 9b 89 ....D#..D#...#..
899b2394 00 00 00 00 5f 55 49 44-30 f3 9a 89 44 23 9b 89 ...._UID0...D#..
899b23a4 00 00 01 00 00 00 00 00-1f 00 00 00 00 00 00 00 ................
899b23b4 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0: kd> dt ACPI!_NSObj 0x899b2388
+0x000 list : _List
+0x008 pnsParent : 0x899b2300 _NSObj
+0x00c pnsFirstChild : (null)
+0x010 dwNameSeg : 0x4449555f
+0x014 hOwner : 0x899af330 Void
+0x018 pnsOwnedNext : 0x899b2344 _NSObj
+0x01c ObjData : _ObjData
+0x030 Context : (null)
+0x034 dwRefCount : 0
0: kd> db 0x899b2388
899b2388 44 23 9b 89 44 23 9b 89-00 23 9b 89 00 00 00 00 D#..D#...#......
899b2398 5f 55 49 44 30 f3 9a 89-44 23 9b 89 00 00 01 00 _UID0...D#......
899b23a8 00 00 00 00 1f 00 00 00-00 00 00 00 00 00 00 00 ................
899b23b8 00 00 00 00 00 00 00 00-00 00 00 00 20 00 00 00 ............ ...
899b23c8 00 f0 9a 89 cc 23 9b 89-cc 23 9b 89 00 00 00 00 .....#...#......
899b23d8 00 00 00 00 00 00 00 00-48 42 55 46 c0 00 00 00 ........HBUF....
899b23e8 00 f0 9a 89 47 01 10 00-10 00 01 10 47 01 24 00 ....G.......G.$.
899b23f8 24 00 01 02 47 01 28 00-28 00 01 02 47 01 2c 00 $...G.(.(...G.,.


0: kd> p
Breakpoint 5 hit
eax=899b2200 ebx=8997dd88 ecx=8997c000 edx=899af000 esi=8997dd68 edi=8997c000
eip=f741dc18 esp=f789a0ec ebp=f789a114 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!CreateNameSpaceObject:
f741dc18 55 push ebp
0: kd> dv
pheap = 0x899af000
pszName = 0x899b0b3c "RSRC"
pnsScope = 0x899b2300
powner = 0x899af330

0: kd> gu
eax=00000000 ebx=8997dd88 ecx=899b24ac edx=00000000 esi=8997dd68 edi=8997c000
eip=f7425a57 esp=f789a0f0 ebp=f789a114 iopl=0 nv up ei pl zr na pe nc
cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00000246
ACPI!Name+0x74:
f7425a57 8bf8 mov edi,eax


{
MoveObjData(&pterm->pnsObj->ObjData, &pterm->pdataArgs[1]);
}

VOID LOCAL MoveObjData(POBJDATA pdataDst, POBJDATA pdataSrc)
{
TRACENAME("MOVEOBJDATA")

ENTER(3, ("MoveObjData(Dest=%x,Src=%x)\n", pdataDst, pdataSrc));

ASSERT(pdataDst != NULL);
ASSERT(pdataSrc != NULL);
if (pdataDst != pdataSrc)
{
//
// We can only move an alias object or a base object with zero
// reference count or a base object with no data buffer.
//
ASSERT((pdataSrc->dwfData & DATAF_BUFF_ALIAS) ||
(pdataSrc->pbDataBuff == NULL) ||
(pdataSrc->dwRefCount == 0));

MEMCPY(pdataDst, pdataSrc, sizeof(OBJDATA));
MEMZERO(pdataSrc, sizeof(OBJDATA)); 把源数据清零。
}

EXIT(3, ("MoveObjData!\n"));
} //MoveObjData

0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997dd68
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997dd68)
((ACPI!_term *)0x8997dd68) : 0x8997dd68 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c8ce6 : 0x8 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0xf74c8e19 : 0x5b [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7438cf0 [Type: _amlterm *]
[+0x020] pnsObj : 0x899b24ac [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x899b2200 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c040 [Type: _ObjData *]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ObjData *)0x899b2200)
((ACPI!_ObjData *)0x899b2200) : 0x899b2200 [Type: _ObjData *]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x2 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x0 [Type: unsigned long]
[+0x008] uipDataValue : 0x0 [Type: unsigned long]
[+0x008] pnsAlias : 0x0 [Type: _NSObj *]
[+0x008] pdataAlias : 0x0 [Type: _ObjData *]
[+0x008] powner : 0x0 [Type: void *]
[+0x00c] dwDataLen : 0x5 [Type: unsigned long]
[+0x010] pbDataBuff : 0x899b0b3c : 0x52 [Type: unsigned char *]
0: kd> db 0x899b0b3c
899b0b3c 52 53 52 43 00 00 00 00-48 4e 53 4f 44 00 00 00 RSRC....HNSOD...
899b0b4c 00 f0 9a 89 90 0a 9b 89-94 0b 9b 89 ac ff 9a 89 ................
899b0b5c 00 00 00 00 52 45 30 30-30 f3 9a 89 90 0a 9b 89 ....RE000.......
899b0b6c 00 00 0a 00 00 00 00 00-00 00 00 00 18 00 00 00 ................
899b0b7c 34 01 9b 89 00 00 00 00-00 00 00 00 48 4e 53 4f 4...........HNSO
899b0b8c 44 00 00 00 00 f0 9a 89-50 0b 9b 89 d8 0b 9b 89 D.......P.......
899b0b9c ac ff 9a 89 00 00 00 00-00 00 00 00 30 f3 9a 89 ............0...
899b0bac 50 0b 9b 89 00 00 83 00-00 00 00 00 00 00 00 00 P...............

0: kd> dt ACPI!_ObjData 0x899b2200+14
+0x000 dwfData : 0
+0x002 dwDataType : 3
+0x004 dwRefCount : 0
+0x004 pdataBase : (null)
+0x008 dwDataValue : 0
+0x008 uipDataValue : 0
+0x008 pnsAlias : (null)
+0x008 pdataAlias : (null)
+0x008 powner : (null)
+0x00c dwDataLen : 0xb2
+0x010 pbDataBuff : 0x899b23ec "G???"

参考:
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_ctxt *)0x8997c000)
((ACPI!_ctxt *)0x8997c000) : 0x8997c000 [Type: _ctxt *]
[+0x000] dwSig : 0x54585443 [Type: unsigned long]
[+0x004] pbCtxtEnd : 0x8997e000 : 0x54 [Type: unsigned char *]
[+0x008] listCtxt [Type: _List]
[+0x010] listQueue [Type: _List]
[+0x018] pplistCtxtQueue : 0x0 [Type: _List * *]
[+0x01c] plistResources : 0x0 [Type: _List *]
[+0x020] dwfCtxt : 0x10 [Type: unsigned long]
[+0x024] pnsObj : 0x0 [Type: _NSObj *]
[+0x028] pnsScope : 0x899b2300 [Type: _NSObj *]
[+0x02c] powner : 0x899af330 [Type: _objowner *]
[+0x030] pcall : 0x8997df34 [Type: _call *]
[+0x034] pnctxt : 0x0 [Type: _nestedctxt *]
[+0x038] dwSyncLevel : 0x0 [Type: unsigned long]
[+0x03c] pbOp : 0xf74c8da2 : 0x14 [Type: unsigned char *]

0: kd> db 0xf74c8da2-80
f74c8d22 34 00 34 00 01 02 47 01-38 00 38 00 01 02 47 01 4.4...G.8.8...G.
f74c8d32 3c 00 3c 00 01 02 47 01-50 00 50 00 01 04 47 01 <.<...G.P.P...G.
f74c8d42 72 00 72 00 01 06 47 01-80 00 80 00 01 01 47 01 r.r...G.......G.
f74c8d52 90 00 90 00 01 10 47 01-a4 00 a4 00 01 02 47 01 ......G.......G.
f74c8d62 a8 00 a8 00 01 02 47 01-ac 00 ac 00 01 02 47 01 ......G.......G.
f74c8d72 b0 00 b0 00 01 06 47 01-b8 00 b8 00 01 02 47 01 ......G.......G.
f74c8d82 bc 00 bc 00 01 02 47 01-00 01 00 01 01 40 47 01 ......G......@G.
f74c8d92 40 01 40 01 01 10 47 01-f0 0c f0 0c 01 02 79 00 @.@...G.......y.

0: kd> db 0xf74c8da2
f74c8da2 14 46 07 5f 43 52 53 08-8b 52 53 52 43 0a 9a 50 .F._CRS..RSRC..P
f74c8db2 4d 4d 4e 8b 52 53 52 43-0a 9c 50 4d 4d 58 7b 5e MMN.RSRC..PMMX{^
f74c8dc2 5e 5e 2e 50 57 52 5f 50-4d 42 41 0c fe ff ff ff ^^.PWR_PMBA.....
f74c8dd2 50 4d 4d 4e 70 50 4d 4d-4e 50 4d 4d 58 8b 52 53 PMMNpPMMNPMMX.RS
f74c8de2 52 43 0a a2 53 4d 4d 4e-8b 52 53 52 43 0a a4 53 RC..SMMN.RSRC..S
f74c8df2 4d 4d 58 7b 5e 5e 5e 2e-50 57 52 5f 53 42 42 41 MMX{^^^.PWR_SBBA
f74c8e02 0c fe ff ff ff 53 4d 4d-4e 70 53 4d 4d 4e 53 4d .....SMMNpSMMNSM
f74c8e12 4d 58 a4 52 53 52 43 5b-82 35 44 4d 41 43 08 5f MX.RSRC[.5DMAC._

参考:

最后结果:

0: kd> dv
pctxt = 0x8997c000
pterm = 0x8997dd68
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997dd68)
((ACPI!_term *)0x8997dd68) : 0x8997dd68 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c8ce6 : 0x8 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0xf74c8e19 : 0x5b [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7438cf0 [Type: _amlterm *]
[+0x020] pnsObj : 0x899b24ac [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x899b2200 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c040 [Type: _ObjData *]
0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_NSObj *)0x899b24ac)
((ACPI!_NSObj *)0x899b24ac) : 0x899b24ac [Type: _NSObj *]
[+0x000] list [Type: _List]
[+0x008] pnsParent : 0x899b2300 [Type: _NSObj *]
[+0x00c] pnsFirstChild : 0x0 [Type: _NSObj *]
[+0x010] dwNameSeg : 0x43525352 [Type: unsigned long]
[+0x014] hOwner : 0x899af330 [Type: void *]
[+0x018] pnsOwnedNext : 0x899b2388 [Type: _NSObj *]
[+0x01c] ObjData [Type: _ObjData]
[+0x030] Context : 0x0 [Type: void *]
[+0x034] dwRefCount : 0x0 [Type: unsigned long]
0: kd> dx -id 0,0,899a2278 -r1 (*((ACPI!_ObjData *)0x899b24c8))
(*((ACPI!_ObjData *)0x899b24c8)) [Type: _ObjData]
[+0x000] dwfData : 0x0 [Type: unsigned short]
[+0x002] dwDataType : 0x3 [Type: unsigned short]
[+0x004] dwRefCount : 0x0 [Type: unsigned long]
[+0x004] pdataBase : 0x0 [Type: _ObjData *]
[+0x008] dwDataValue : 0x0 [Type: unsigned long]
[+0x008] uipDataValue : 0x0 [Type: unsigned long]
[+0x008] pnsAlias : 0x0 [Type: _NSObj *]
[+0x008] pdataAlias : 0x0 [Type: _ObjData *]
[+0x008] powner : 0x0 [Type: void *]
[+0x00c] dwDataLen : 0xb2 [Type: unsigned long]
[+0x010] pbDataBuff : 0x899b23ec : 0x47 [Type: unsigned char *]


参考:
第一部分:

0: kd> kc
#
00 ACPI!ParseOpcode
01 ACPI!ParseArg
02 ACPI!ParseTerm
03 ACPI!RunContext
04 ACPI!InsertReadyQueue

第二部分:
0: kd> kc
#
00 ACPI!Buffer 里面把范围内的参数处理到pdataResult
01 ACPI!ParseTerm
02 ACPI!RunContext
03 ACPI!InsertReadyQueue
04 ACPI!RestartContext


第三部分:
0: kd> kc
#
00 ACPI!ParseTerm acpi!name 里面把参数里的复制过去。
01 ACPI!RunContext

先把参数处理好再调用acpi!name

0: kd> dx -id 0,0,899a2278 -r1 ((ACPI!_term *)0x8997dd68)
((ACPI!_term *)0x8997dd68) : 0x8997dd68 [Type: _term *]
[+0x000] FrameHdr [Type: _framehdr]
[+0x010] pbOpTerm : 0xf74c8ce6 : 0x8 [Type: unsigned char *]
[+0x014] pbOpEnd : 0x0 [Type: unsigned char *]
[+0x018] pbScopeEnd : 0xf74c8e19 : 0x5b [Type: unsigned char *]
[+0x01c] pamlterm : 0xf7438cf0 [Type: _amlterm *]
[+0x020] pnsObj : 0x899b24ac [Type: _NSObj *]
[+0x024] iArg : 2 [Type: int]
[+0x028] icArgs : 2 [Type: int]
[+0x02c] pdataArgs : 0x899b2200 [Type: _ObjData *]
[+0x030] pdataResult : 0x8997c040 [Type: _ObjData *] pdataResult : 0x8997c040

参考:

if (pterm->pdataArgs != NULL)
{
FreeDataBuffs(pterm->pdataArgs, pterm->icArgs);
FREEODOBJ(pterm->pdataArgs);
}
PopFrame(pctxt);
}

EXIT(2, ("ParseTerm=%x\n", rc));
return rc;
} //ParseTerm

参考2:

NTSTATUS LOCAL ParseOpcode(PCTXT pctxt, PUCHAR pbScopeEnd, POBJDATA pdataResult)
{

//
// Must be an ASL Term.
//
pctxt->pbOp++;
rc = PushTerm(pctxt, pbOpTerm, pbScopeEnd, pamlterm, pdataResult);
}

NTSTATUS LOCAL PushTerm(PCTXT pctxt, PUCHAR pbOpTerm, PUCHAR pbScopeEnd,
PAMLTERM pamlterm, POBJDATA pdataResult)
{
TRACENAME("PUSHTERM")
NTSTATUS rc = STATUS_SUCCESS;
PTERM pterm;

ENTER(2, ("PushTerm(pctxt=%x,pbOpTerm=%x,pbScopeEnd=%x,pamlterm=%x,pdataResult=%x)\n",
pctxt, pbOpTerm, pbScopeEnd, pamlterm, pdataResult));

if ((rc = PushFrame(pctxt, SIG_TERM, sizeof(TERM), ParseTerm, &pterm)) ==
STATUS_SUCCESS)
{
pterm->pbOpTerm = pbOpTerm;
pterm->pbScopeEnd = pbScopeEnd;
pterm->pamlterm = pamlterm;
pterm->pdataResult = pdataResult; 关键代码:pdataResult赋值到新的pterm->pdataResult中!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1119377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vllm笔记(1):最基础的离线推理

vllm是一个知名的推理框架&#xff0c;也是开始尝试接触vllm了。 本代码来源https://github.com/vllm-project/vllm/blob/main/examples/offline_inference/basic/basic.py #LLM 是用于运行 vLLM 引擎离线推理的主类。 #SamplingParams 指定了采样过程的参数。 from vllm imp…

拒绝繁琐配置,推荐一款简洁易用的项目管理工具Kanass

为了保证项目高效、有序地推进&#xff0c;我们通常使用如Jira等项目管理工具。Jira整体功能完善&#xff0c;自定义能力强大&#xff0c;但配置繁琐&#xff0c;上手难度大&#xff0c;同时随着Atlassian销售策略调整Jira server中国区即将停止维护&#xff0c;今天给大家推荐…

2核2G3M的云服务器有哪些用途?适合部署小型网站或博客吗?

阿里云近期推出的经济型e实例&#xff0c; 2核2G、3M带宽、独立公网IP、不限流量&#xff0c; 99元/年&#xff0c;续费同价&#xff0c;我自己也买了&#xff0c;用了有几年了。 价格低到让人怀疑&#xff1a; 这样的配置&#xff0c;到底能干点什么&#xff1f; 部署个人博客…

Lua 函数教程

Lua 函数 1. 课程信息 课题&#xff1a;Lua 函数基础与进阶用法课时建议&#xff1a;60 ~ 90 分钟适合对象&#xff1a;已掌握 Lua 变量、流程控制&#xff08;if/for/while&#xff09;与 table 基础的学习者 2. 教学目标 理解函数的作用&#xff1a;封装逻辑、复用代码、提升…

1核2GB服务器运行Nginx + MySQL + PHP(LNMP)会有性能瓶颈吗?

很多新手在搭建网站时&#xff0c; 会选最便宜的云服务器——比如1核2GB配置。 然后装上 Nginx MySQL PHP&#xff08;即 LNMP 环境&#xff09;&#xff0c; 想着“先试试看”。 但很快发现&#xff1a; 网站偶尔打不开、后台卡顿、数据库连接超时…… 是配置太低&#xff…

计算机深度学习毕设实战-基于python的海洋生物识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

这里还有8个“Manus”:1亿美元ARR,都是ToC

Meta刚掏出20亿美元把Manus收入囊中的同时&#xff0c;一份名单也随即在VC圈疯传—— “1亿美元ARR俱乐部”。 上榜公司不多&#xff0c;但个个鼎鼎大名&#xff1a; Perplexity&#xff1a;200亿美元ElevenLabs&#xff1a;66亿美元Lovable&#xff1a;66亿美元Replit&…

汽车制造质量大数据分析如何助力企业创新发展?

在汽车制造业转型升级的关键阶段&#xff0c;质量大数据分析正成为企业提升核心竞争力的重要抓手。随着市场竞争日趋激烈&#xff0c;消费者对汽车产品的要求不断提高&#xff0c;传统的质量管理方法已经难以满足现代生产的需求。质量大数据分析通过整合多源异构数据&#xff0…

拒绝繁琐配置,推荐一款简洁易用的知识管理工具sward

中国区Confluence Server即将停止销售&#xff0c;今天给大家推荐一款国产开源免费的开源平替方案 - sward。 1、产品简介 sward是一款国产的且免费开源的知识管理工具&#xff0c;包含知识库管理、目录管理、文档管理、markdown管理、文档的评审与版本维护等模块。产品页面简…

【问题记录】解决unity 项目里用了AVPro Video,打包到Mac端时报错Plugin ‘AVProVideo.bundle‘ is used from several locations

unity 项目里用了AVPro Video&#xff0c;打包到Mac端时报错如下&#xff1a;Plugin AVProVideo.bundle is used from several locations: Assets/Plugins/AVProVideo.bundle would be copied to <PluginPath>/AVProVideo.bundle Assets/Plugins/macOS/AVProVideo.bundle…

对象存储OSS是什么,有什么用途?

你可能听过“云服务器”“数据库”“CDN”&#xff0c; 但有没有注意过“对象存储”这个词&#xff1f; 比如阿里云的 OSS&#xff08;Object Storage Service&#xff09;&#xff0c;其他云厂商也有类似的产品&#xff0c;可能名字略有差异 听起来很技术&#xff0c;其实用途…

2027 年 1 月 1 日起施行!GB46864 新规落地,二手电子产品信息清除有了 “铁规矩”,你的隐私不再 “裸奔”

随着电子产品更新迭代加速&#xff0c;二手手机、电脑、平板等设备的流通越来越频繁。但你是否知道&#xff0c;简单的 “恢复出厂设置” 根本无法彻底清除数据&#xff1f;不少不法分子通过技术手段恢复二手设备中的用户信息&#xff0c;导致通讯录泄露、账号被盗、生物识别信…

融资35亿后,Kimi神秘模型现身竞技场

融资35亿后&#xff0c;Kimi的新模型紧跟着就要来了&#xff1f;&#xff01; 大模型竞技场上&#xff0c;一个名叫Kiwi-do的神秘模型悄然出现。 发现这个新模型的推特网友询问了模型的身份&#xff0c;结果模型自报家门&#xff0c;表示自己来自月之暗面Kimi&#xff0c;训练…

vscode出现中文乱码?

第一次用vscode打开代码会出现中文注释因识别不了而乱码的情况&#xff0c;类似这样printf(“张三\n”);1.单击软件左下角设置&#xff08;类似齿轮&#xff09;的按钮在出现的搜索框里输入&#xff1a;Files.autoGuessEncoding&#xff0c;按回车键确定。关闭vscode,然后重新打…

深度学习毕设选题推荐:基于python-CNN的常见鱼类分类识别深度学习

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

彻底搞懂 Event Loop!一次性吃透宏任务、微任务、执行顺序

Event Loop&#xff08;事件循环&#xff09;是 JavaScript 执行机制里的核心知识点。不管是前端面试还是日常开发&#xff0c;只要涉及异步操作&#xff0c;就绕不开它。 这篇文章不玩高深术语&#xff0c;用一套真实示例&#xff0c;带你搞懂&#xff1a; 同步任务、宏任务、…

AI跨文化陪练系统:用技术破解“语言通而心意阻”

和海外客户谈判时&#xff0c;一句“再考虑”被误解为拒绝&#xff1b;向异国朋友问候&#xff0c;却因语气不当显得冒犯——这种“语言过关、文化翻车”的场景&#xff0c;正是AI跨文化能力陪练系统要解决的核心问题。它不止是翻译工具&#xff0c;更是靠技术复刻真实跨文化场…

AI正在占领你的视频推荐流

你的视频推荐流&#xff0c;正在被AI“吞噬”。 这不是危言耸听&#xff0c;正经新调查发现&#xff1a; YouTube算法向新用户展示的视频中&#xff0c;有超过20%的内容是AI制造的低质量视频。 再扎心点说就是&#xff0c;我们平时在YouTube刷到的每5条视频中&#xff0c;可…

深度学习毕设项目推荐-基于python-CNN的常见鱼类分类识别

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

docker 部署 Prompt Optimizer (提示词优化器)

Prompt Optimizer (提示词优化器) &#x1f680; 在线体验 | 快速开始 | 常见问题 | 开发文档 | Vercel部署指南 | Chrome插件 &#x1f4d6; 项目简介 Prompt Optimizer是一个强大的AI提示词优化工具&#xff0c;帮助你编写更好的AI提示词&#xff0c;提升AI输出质量。支持…