《Windows 95系统编程奥秘》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:(美)(M.彼得雷克)Matt Pietrek著;米东等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1996
  • ISBN:7505332783
  • 页数:592 页
图书介绍:

目录 1

引言 1

关于您和读者的假定 1

伪码 2

样本程序 2

第一章 展望WINDOWS 95 3

Win32综述 3

Win32操作系统的地位 5

Windows NT工具软件 6

Win32s工具软件 7

Windows 95工具软件 8

Microsoft之外的Win32工具 10

未来开发程序的考虑 11

Win32的未来 11

小结 11

第二章 什么是Windows 95的新特征 13

与Windows 3.1的相似点 14

在Windows 3.1上的改进 19

DOS几乎不存在了 19

窗式系统 20

转换成信息系统 21

16位和32位进程接口 22

Win16Mutex 24

Windows 95 GDI 25

系统资源清除 26

把内存消耗压缩在IMB以下 26

新产品特性 26

Windows 95 Win32工具 27

Windows 95 Win32系统DLL 27

Windows 95中ring 0的组成 28

进程管理 30

线程管理 32

进程与线程同步 33

模块管理 35

Windows 95地址空间 36

Windows 95内存管理 37

内存映射文件 39

结构异常处理 39

记录(registry) 40

给用户附加的内存 42

系统信息和调试 43

关于Windows 95的一点“设计垃圾”秘密 44

Anti-hacking码 45

Win32 API隐患 46

自由系统资源的粗制滥造 47

Win16仍然有生命力 47

小结 47

第三章 模块、进程和线程 49

Win32模块 50

IMTE(Internal Module Table Entries[?] 51

IMTE结构 52

MODREF结构 55

Module-Related API函数 57

GetProcAddress和IGetProcAddress 57

x_FindAddressFromExportOrdinal 61

x_FindAddressFromExportName 64

GetModuleFileName和IGetModuleFileName 66

GetModuleHandle和IGetModuleHandle 69

x_GetMODREFFromFilename 71

x_GetHModuleFromMODREF 72

KERNEL32(简称K32)对象 73

Windows 95进程 74

什么是进程柄?什么是进程ID? 75

Windows 95进程数据库(PDB) 77

GetExitCodeProcess和IGetExitCodeProcess 84

SetUnhandledExceptionFiIter 85

OpenProcess 85

SetFileApisToOEM 86

环境数据库(The Environment Database) 87

FreeEnvironmentStringsA 89

GetEnvironmentStrings 89

GetCommandLineA 89

GetStdHandle 90

SetStdHandle 90

进程柄表 91

线程(Thread) 92

什么是线程柄?什么是线程ID? 94

线程数据库 95

线程信息块(TIB) 102

线程优先 103

GetThreadPriority(获得线程优先级函数) 104

SetThreadPriority(设置线程优先及函数) 105

CalculateNewPriority(计算新的优先级函数) 106

SetPriorityClass(设置优先类函数) 107

GetPriorityClass(获得优先类函数) 109

线程执行控制 110

GetThreadContext和IGetThreadContext 110

x_ThreadContext_CopyRegs 113

SetThreadContext和ISetThreadContext 114

SuspendThread和VWIN32 SuspendThread 117

ResumeThread 118

结构异常处理 119

结构异常处理及参数有效化 123

GetCurrentDirectoryA 124

x_invalid_param_handler 126

线程局部存储器(TLS) 128

TlsAlloc 129

TlsSetValue 131

TlsGetValue 131

TlsFree 132

GetExitCodeThread和IGetExitCodeThread 134

SetLastError 134

GetLastError 134

其它线程函数 134

Win32Wlk程序 136

Win32Wlk的内部解析 138

小结 140

第四章 USER和GDI子系统 141

Windows 95 USER模块 141

USER32转换例子 144

32位堆 148

神秘的GetFreeSystemResources释放 153

窗口系统的混合16/32位特性 161

信息系统的变化 162

线程消息队列 165

单一队列系统窗口 171

windows 95中(H)WND结构的改变 172

windows 95窗口类的改变 178

SHOWWND程序 181

选择16位USER.EXE函数的伪码 182

USER 32并不仅仅转换成USER.EXE 189

HeapWalk(堆行走函数) 192

Windows 95中单一码支持 196

Windows 95 GDI模块 199

GDI目标 201

Win16应用程序可用的新Win32 GDI函数 207

小结 208

第五章 内存管理 209

基于页面的Windows 95内存管理 209

内存分页 209

内存分页与选择器 212

Windows 95的地址空间以及Win32进程 213

共享内存 218

Windows 95的“写时拷贝”(Copy on Write) 220

PHYS程序 221

利用PHYS来检测共享内存 226

用PHYS来测试写时拷贝(copy on write) 227

PHYS程序中的“好素材”(适用于高水平读者) 227

内存文本(先进的内容) 230

Windows 95内存API 234

VMM函数 235

Win32虚拟数 237

VirtualAlloc 238

mmPAGEToPC 242

VirtualFree 243

VirtualQueryEx 244

VirtualQuery和lVirtualQuery 246

VirtualProtectEx 247

VirtualProtect和IVirtualProtect 250

VirtualLock和VirtualUnlock 251

Win32堆函数(HEAP FUNCTlONS) 251

Win32堆首(heap head)与堆场(heap arenas) 253

Windows 95堆首(heap header) 256

行走堆(WALKHEAP)程序 259

GetProcessHeap(获得进程堆函数) 261

HeapAlloc(堆配置函数)和IHeapAlloc 262

HPAlloc 263

hpCarve(堆分隔函数) 267

ChecksumHeapBlock(堆块检验和函数) 269

HeapSize和IHeapSize函数(堆尺寸函数) 270

HeapFree和IHeapFree(堆释放函数) 271

hpFreeSub 273

HeapReAlloc和IHeapReAlloc(堆再配置函数) 276

HPReAlloc函数 278

HeapCreate函数(堆生成函数) 281

HPInit(堆初始化函数) 283

HeapDestory和IHeapDestory(堆破坏函数) 287

HeapValidate(堆有效化函数) 290

HeapCompact(堆压缩函数) 290

GetProcessHeaps(获取进程堆函数) 291

HeapLock(堆锁定函数) 291

HeapUnlock(堆解锁函数) 291

Win32局部和全局堆函数(Local and Global Heap Functions) 292

Win32局部堆 293

LocalAlloc和ILocalAlloc(局部配置函数) 295

LocalLock和ILocalLock(局部锁定函数) 299

LocalUnlock(局部解锁函数) 301

LocalFree和ILocalFree(局部释放函数) 303

LocalReAlloc和ILocalReAlloc(局部再配置函数) 306

LocalHandle和ILocalHandle(局部句柄函数) 310

LocalSize和ILocalSize(局部尺寸函数) 312

LocalFlags(局部标志函数) 314

LocalCompact(局部压缩函数) 316

Win32全局堆函数(Global Heap functions) 316

LocalShrink(局部压缩函数) 316

GlobalAlloc 317

GlobalLock 317

GlobalUnlock 317

GlobalFree 317

GlobalReAlloc 317

GlobalFlags and IGlobalFlags 318

GlobalWire 318

GlobalUnWire 318

GlobalHandle 318

GlobalSize 318

GlobalFix 319

GlobalUnFix 319

GlobalCompact 319

杂函数(Miscellaneous Functions) 319

WriteProcessMemory和ReadProcessMemory 319

(写进程内存和读进程内存函数) 319

GlobalMemoryStatus和IGlobalMemoryStatus 322

(全局内存状态数) 322

GetThreadSelectorEntry和IGetThreadSelectorEntry 324

(获取线程选择器入口函数) 324

C/C++编译器的malloc和new函数 326

小结 328

第六章 Windows 95的三个核心部件 329

VxD剖析 330

从其它VxD中调用VxD函数 331

从Winl6(保护模式)代码调用VxD函数 332

Win32代码调用VxD函数 334

从哪儿可以找到Win32 VxD服务? 340

VMM提供的Win32 VxD服务 341

应用程序调用Win32 VxD服务 342

分析VWIN32.VXD 345

VWIN32.VXD的ring 0 VxD服务API 345

VWIN32.VXD的16位保护模式API 347

VWIN32.VXD的Win32 VxD服务APl 348

VWIN32 TDBX 354

Windows 95的三个核心部件怎样通信 357

VWIN32的KRNL386的知识 358

KERNEL32.DLL的KRNL386.EXE知识 360

(或者说,微软公司没告诉你的东西) 360

KERNEL32.DLL的VWIN32知识 360

VWIN32的KERNEL32.DLL知识 360

KRNL386的KERNEL32.DLL知识 364

KRNL386的VWIN32知识 365

Win32 VxD服务侦探程序(W32SVSPY) 365

W32SVSPY工作的一个样本 367

编写W32SVSPY的技术挑战 370

小结 372

第七章 Win16模块和任务 373

16位模块 374

为什么32位的模块和进程要有16位的表示方法? 374

NE头 376

Windows 95中的模块数据库新域 384

段表 385

资源表(The Resource Table) 387

入口表 390

驻留名表和非驻留名表 391

HMODULE和HINSTANCE 392

与模块相关的函数 394

GetModuleHandle函数 394

GetExePtr函数 397

GetProcAddress函数 401

16位任务 406

一些关于任务的错误认识 409

任务数据库(TDB) 410

关于任务的函数 418

GetCurrentTask()函数 418

IsTask()函数 419

GetTaskQueue()函数 420

MakeProcInstance()函数 421

TaskFindHandle函数 425

SHOW16程序 427

小结 432

第八章 可移植的执行模块和COFF OBJ格式 433

PEDUMP程序 435

基本的Win32和PE概念 436

PE头标 437

节表 444

经常遇到的节 450

.text节 450

Borland的CODE和.icode节 451

.CRT节 452

.bss节 452

DATA节 452

.data节 452

.rsrc节 453

.idata节 453

.edata节 453

.reloc节 453

.tls节 454

.rdata节 455

.drective节 456

名字含$的节(只对OBJ/LIB文件) 456

.debug$S和.debug$T节 456

各式各样的节 457

PE文件引入 457

IMAGE_THUNK_DATA DWORD 460

把IMAGE_IMPORT_DESCRIPTOR和 461

IMAGE_THUNK_DATA并在一起 461

PE文件引出 463

引出传递 466

PE文件资源 467

PE文件基址重定位 470

COFF符号表 472

COFF调试信息 477

COFF行号表 479

PE文件和COFF OBJ文件之间的差别 480

COFF LIB文件 481

Linker成员 483

Longnames成员 485

小结 485

第九章 读者自身探密 487

探密概览 488

用文件转储工具探密 489

用侦探工具探密 497

用反汇编探密 503

反汇编的学习和技术 504

弄清常用代码序列和约定 506

一个反汇编例子 521

高级技巧 526

使用SoftIce/Windows 526

应用硬件断点 527

VAR2MAP工具 528

VxD.(园点)命令 528

识别VxD服务程序 530

识别Win32 VxD服务程序 531

识别参数有效性检查和Ixxx函数 531

使用调试版本 533

Pentium优化的代码 533

小结 534

第十章 编写Win32 API侦探程序 535

拦截函数 536

在另一个进程内接种一个DLL 539

用Debug API来控制目标进程 541

编写登记API函数的程序段 543

参数信息编码 545

函数返回值 546

APISPY32程序 548

Win32s特有的代码 567

APISPYLD的代码 568

使用APISPY32时的注意事项 581

在你自己的程序中拦截函数 582

小结 588

附录A 未公布的KEPNEL32.DLL链接库 589