按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
7 FOO。DLL
pNextModRef 8
9 (index into module table)
ppdb 9 BAR。DLL
MODREF list
(MY。EXE uses KERNEL32 and BAR。DLL)
图14…1 进程 (PDB ) 透过 「MODREF 串行」连接到其所使用的所有模块
执行线程优先权 (Priority)
我想我们现在已经能够用很具体的形象去看所谓的进程、模块、执行线程了。「执行事实」
发生在执行线程身上,而不在进程身上。也就是说,CPU 排程单位是执行线程而非进程。排
程器据以排序的,是每个执行线程的优先权。
优先权的设定分为两个阶段。我已经在第1章介绍过。执行线程的「父亲大人」(进程)
748
…………………………………………………………Page 811……………………………………………………………
14 MFC
第 章 多緒程式設計
拥有所谓的优先权等级(priority class ,图1…7),可以在CreateProcess 的参数中设定。
执行线程基本上继承自其「父亲大人」的优先权等级,然后再加上CreateThread 参数中的
微调差额(…2~+2 )。获得的结果(图1…8)便是执行线程的所谓base priority ,范围从0~31
数值愈高优先权愈高。::SetThreadPriority 是调整优先权的工具,它所指定的也是微调差
额(…2~+2 )。
IMTE 結構 Module Database (MDB)
00h DWORD un1 IMAGE_NT_HEADERS :
DWORD Signature
04h PIMAGE_NT_HEADERS pNTHdr IMAGE_FILE_HEADER FileHeader :
08h DWORD un2 WORD Machine;
0Ch PSTR pszFileName WORD NumberOfSections;
10h PSTR pszModName DWORD TimeDateStamp;
14h WORD cbFileName DWORD PointerToSymbolTable;
DWORD NumberOfSymbols;
16h WORD cbModName
WORD SizeOfOptionalHeader;
18h DWORD un3 WORD Characteristics;
1Ch DWORD cSections IMAGE_OPTIONAL_HEADER OptionalHeader :
20h DWORD un5 WORD Magic;
24h DWORD baseAddress/Module Handle BYTE MajorLinkerVersion;
BYTE MinorLinkerVersion;
28h WORD hModule16
DWORD SizeOfCode;
2Ah WORD cUsage DWORD SizeOfInitializedData;
2Ch DWORD un7 DWORD SizeOfUninitializedData;
30h PSTR pszFileName2 DWORD AddressOfEntryPoint;
34h WORD cbFileName2 DWORD BaseOfCode;
DWORD BaseOfData;
36h DWORD pszModName2
DWORD ImageBase;
3Ah WORD cbModName2 DWORD SectionAlignment;
DWORD FileAlignment;
WORD MajorOperatingSystemVersion;
WORD MinorOperatingSystemVersion;
WORD MajorImageVersion;
WORD MinorImageVersion;
WORD MajorSubsystemVersion;
WORD MinorSubsystemVersion;
DWORD Reserved1;
DWORD SizeOfImage;
DWORD SizeOfHeaders;
DWORD CheckSum;
WORD Subsystem;
WORD DllCharacteristics;
DWORD SizeOfStackReserve;
DWORD SizeOfStackmit;
DWORD SizeOfHeapReserve;
DWORD SizeOfHeapmit;
DWORD LoaderFlags;
DWORD NumberOfRvaAndSizes;
IMAGE_DATA_DIRECTORY DataDirectory'16'
// 指向各个sections,