📄 w2k_dbg.c
字号:
dControl1);
}
if (i > 0)
{
pdi->apbData [dBase] = pbData2;
pdi->apbData [dBase + dDelta] = pbData1;
dTrans++;
}
}
}
}
}
return;
}
// -----------------------------------------------------------------
PDBG_LIST WINAPI dbgIndexList (PDBG_INDEX pdi)
{
DWORD dNext, i;
PDBG_LIST pdl = NULL;
if ((pdi != NULL)
&&
((pdl = dbgListCreateEx (pdi->dData, pdi->dEntries,
pdi->dContext, pdi->pContext,
&pdi->pdl->st))
!= NULL))
{
for (i = 0; i < pdi->dEntries; i++)
{
dNext = *(PDWORD) (pdi->apbData [i] +
pdi->dMemberNext);
CopyMemory (pdl->abData + pdl->dOffset,
pdi->apbData [i], dNext);
pdl->dOffset += dNext;
}
}
return dbgListFinish (pdl);
}
// -----------------------------------------------------------------
PDBG_LIST WINAPI dbgIndexListEx (PDBG_INDEX pdi)
{
DWORD dNext, i, j;
PDBG_INDEX pdi1;
PDBG_LIST pdl = NULL;
if ((pdi != NULL)
&&
((pdl = dbgListCreateEx (pdi->dData, pdi->dEntries,
pdi->dContext, pdi->pContext,
&pdi->pdl->st))
!= NULL))
{
for (i = 0; i < pdi->dEntries; i++)
{
pdi1 = pdi->ppdi [i];
CopyMemory (pdl->abData + pdl->dOffset,
pdi1->pContext, pdi1->dContext);
pdl->dOffset += pdi1->dContext;
for (j = 0; j < pdi1->dEntries; j++)
{
dNext = *(PDWORD) (pdi1->apbData [j] +
pdi1->dMemberNext);
CopyMemory (pdl->abData + pdl->dOffset,
pdi1->apbData [j], dNext);
pdl->dOffset += dNext;
}
}
}
return dbgListFinish (pdl);
}
// -----------------------------------------------------------------
BOOL WINAPI dbgIndexSave (PWORD pwPath,
PDBG_INDEX pdi)
{
PDBG_LIST pdl;
BOOL fOk = FALSE;
if ((pdl = dbgIndexList (pdi)) != NULL)
{
fOk = dbgListSave (pwPath, pdl);
dbgListDestroy (pdl);
}
return fOk;
}
// -----------------------------------------------------------------
BOOL WINAPI dbgIndexSaveEx (PWORD pwPath,
PDBG_INDEX pdi)
{
PDBG_LIST pdl;
BOOL fOk = FALSE;
if ((pdl = dbgIndexListEx (pdi)) != NULL)
{
fOk = dbgListSave (pwPath, pdl);
dbgListDestroy (pdl);
}
return fOk;
}
// =================================================================
// PROCESS MANAGEMENT
// =================================================================
PDWORD WINAPI dbgProcessIds (PDWORD pdCount)
{
DWORD dSize;
DWORD dCount = 0;
PDWORD pdList = NULL;
dSize = SIZE_MINIMUM * sizeof (DWORD);
while ((pdList = dbgMemoryCreate (dSize)) != NULL)
{
if (EnumProcesses (pdList, dSize, &dCount) &&
(dCount < dSize))
{
dCount /= sizeof (DWORD);
break;
}
dCount = 0;
pdList = dbgMemoryDestroy (pdList);
if ((dSize <<= 1) > (SIZE_MAXIMUM * sizeof (DWORD))) break;
}
if (pdCount != NULL) *pdCount = dCount;
return pdList;
}
// -----------------------------------------------------------------
PHMODULE WINAPI dbgProcessModules (HANDLE hProcess,
PDWORD pdCount)
{
DWORD dSize;
DWORD dCount = 0;
PHMODULE phList = NULL;
if (hProcess != NULL)
{
dSize = SIZE_MINIMUM * sizeof (HMODULE);
while ((phList = dbgMemoryCreate (dSize)) != NULL)
{
if (EnumProcessModules (hProcess, phList, dSize,
&dCount))
{
if (dCount <= dSize)
{
dCount /= sizeof (HMODULE);
break;
}
}
else
{
dCount = 0;
}
phList = dbgMemoryDestroy (phList);
if (!(dSize = dCount)) break;
}
}
if (pdCount != NULL) *pdCount = dCount;
return phList;
}
// -----------------------------------------------------------------
PDBG_LIST WINAPI dbgProcessAdd (PDBG_LIST pdl,
DWORD dId)
{
PDBG_PROCESS pdp;
PDBG_MODULE pdm;
MODULEINFO mi;
WORD awPath [MAX_PATH];
HANDLE hProcess;
PHMODULE phModules;
DWORD dModules, dPath, dFile, dData, dOffset, i;
PDBG_LIST pdl1 = pdl;
if (pdl1 != NULL)
{
dOffset = pdl1->dOffset;
if ((hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE, dId))
!= NULL)
{
if ((phModules = dbgProcessModules (hProcess,
&dModules))
!= NULL)
{
for (i = 0; (pdl1 != NULL) && (i < dModules); i++)
{
if (!GetModuleInformation (hProcess,
phModules [i],
&mi, sizeof (mi)))
{
mi.SizeOfImage = 0;
mi.lpBaseOfDll = NULL;
mi.EntryPoint = NULL;
}
dPath = GetModuleFileNameEx (hProcess,
phModules [i],
awPath, MAX_PATH);
awPath [dPath++] = 0;
dFile = dbgPathFile (awPath);
if (!i)
{
dData = dbgMemoryAlignEx (DBG_PROCESS_,
dPath);
if ((pdl1 = dbgListResize (pdl1, dData))
!= NULL)
{
pdp = (PDBG_PROCESS) (pdl1->abData +
pdl1->dOffset);
pdp->dNext = 0;
pdp->dSize = mi.SizeOfImage;
pdp->pBase = mi.lpBaseOfDll;
pdp->pStart = mi.EntryPoint;
pdp->dDown = dData;
pdp->dId = dId;
pdp->dModules = dModules;
pdp->dFile = dFile;
lstrcpy (pdp->awPath, awPath);
dbgListNext (pdl1, dData, TRUE);
}
}
dData = dbgMemoryAlignEx (DBG_MODULE_, dPath);
if ((pdl1 = dbgListResize (pdl1, dData))
!= NULL)
{
pdm = (PDBG_MODULE) (pdl1->abData +
pdl1->dOffset);
pdm->dNext = dData;
pdm->dSize = mi.SizeOfImage;
pdm->pBase = mi.lpBaseOfDll;
pdm->pStart = mi.EntryPoint;
pdm->dFile = dFile;
lstrcpy (pdm->awPath, awPath);
dbgListNext (pdl1, dData, FALSE);
}
}
dbgMemoryDestroy (phModules);
}
CloseHandle (hProcess);
}
if (pdl1 != NULL)
{
if (dOffset != pdl1->dOffset)
{
pdp = (PDBG_PROCESS) (pdl1->abData + dOffset);
pdp->dNext = pdl1->dOffset - dOffset;
}
else
{
dData = dbgMemoryAlignEx (DBG_PROCESS_, 1);
if ((pdl1 = dbgListResize (pdl1, dData)) != NULL)
{
pdp = (PDBG_PROCESS) (pdl1->abData + dOffset);
pdp->dNext = dData;
pdp->dSize = 0;
pdp->pBase = NULL;
pdp->pStart = NULL;
pdp->dDown = dData;
pdp->dId = dId;
pdp->dModules = 0;
pdp->dFile = 0;
pdp->awPath [0] = 0;
dbgListNext (pdl1, dData, TRUE);
}
}
}
}
return pdl1;
}
// -----------------------------------------------------------------
PDBG_LIST WINAPI dbgProcessList (void)
{
PDWORD pdProcesses;
DWORD dProcesses, i;
PDBG_LIST pdl = NULL;
if ((pdProcesses = dbgProcessIds (&dProcesses)) != NULL)
{
pdl = dbgListCreate ();
for (i = 0; (pdl != NULL) && (i < dProcesses); i++)
{
pdl = dbgProcessAdd (pdl, pdProcesses [i]);
}
dbgMemoryDestroy (pdProcesses);
}
return dbgListFinish (pdl);
}
// -----------------------------------------------------------------
PDBG_INDEX WINAPI dbgProcessIndex (PWORD pwImage,
DWORD dSort,
BOOL fReverse)
{
return dbgIndexCreateEx ((pwImage != NULL
? dbgListLoad (pwImage)
: dbgProcessList ()),
OFFSET (DBG_PROCESS, dNext ),
OFFSET (DBG_PROCESS, pBase ),
OFFSET (DBG_PROCESS, dSize ),
OFFSET (DBG_PROCESS, dId ),
OFFSET (DBG_PROCESS, awPath),
OFFSET (DBG_PROCESS, dFile ),
dSort, fReverse);
}
// -----------------------------------------------------------------
PDBG_INDEX WINAPI dbgProcessIndexEx (PWORD pwImage,
DWORD dSort,
BOOL fReverse)
{
DWORD i, n;
PDBG_INDEX pdi = dbgProcessIndex (pwImage, dSort, fReverse);
if (pdi != NULL)
{
for (i = n = 0; i < pdi->dEntries; i++)
{
if ((pdi->ppdi [i] = dbgModuleIndex (pdi->ppdp [i],
dSort, fReverse))
!= NULL) n++;
}
if (n < pdi->dEntries) pdi = dbgIndexDestroyEx (pdi);
}
return pdi;
}
// -----------------------------------------------------------------
PWORD WINAPI dbgProcessGuess (DWORD dIndex)
{
PWORD pwName = L"<unknown>";
switch (dIndex)
{
case 0: pwName = L"<Idle>"; break;
case 1: pwName = L"<System>"; break;
}
return pwName;
}
// =================================================================
// MODULE MANAGEMENT
// =================================================================
PDBG_LIST WINAPI dbgModuleList (PDBG_PROCESS pdp)
{
DWORD dData;
PDBG_LIST pdl = NULL;
if (pdp != NULL)
{
dData = pdp->dNext - pdp->dDown;
if ((pdl = dbgListCreateEx (dData, pdp->dModules,
pdp->dDown, pdp, NULL))
!= NULL)
{
CopyMemory (pdl->abData + pdl->dOffset,
(PBYTE) pdp + pdp->dDown, dData);
pdl->dOffset += dData;
}
}
return dbgListFinish (pdl);
}
// -----------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -