内容简介
目录
引言
关于您和读者的假定
伪码
样本程序
第一章 展望WINDOWS 95
Win32综述
Win32操作系统的地位
Windows NT工具软件
Win32s工具软件
Windows 95工具软件
Microsoft之外的Win32工具
未来开发程序的考虑
Win32的未来
小结
第二章 什么是Windows 95的新特征
与Windows 3.1的相似点
在Windows 3.1上的改进
DOS几乎不存在了
窗式系统
转换成信息系统
16位和32位进程接口
Win16Mutex
Windows 95 GDI
系统资源清除
把内存消耗压缩在IMB以下
新产品特性
Windows 95 Win32工具
Windows 95 Win32系统DLL
Windows 95中ring 0的组成
进程管理
线程管理
进程与线程同步
模块管理
Windows 95地址空间
Windows 95内存管理
内存映射文件
结构异常处理
记录(registry)
给用户附加的内存
系统信息和调试
关于Windows 95的一点“设计垃圾”秘密
Anti-hacking码
Win32 API隐患
自由系统资源的粗制滥造
Win16仍然有生命力
小结
第三章 模块、进程和线程
Win32模块
IMTE(Internal Module Table Entries[?]
IMTE结构
MODREF结构
Module-Related API函数
GetProcAddress和IGetProcAddress
x_FindAddressFromExportOrdinal
x_FindAddressFromExportName
GetModuleFileName和IGetModuleFileName
GetModuleHandle和IGetModuleHandle
x_GetMODREFFromFilename
x_GetHModuleFromMODREF
KERNEL32(简称K32)对象
Windows 95进程
什么是进程柄?什么是进程ID?
Windows 95进程数据库(PDB)
GetExitCodeProcess和IGetExitCodeProcess
SetUnhandledExceptionFiIter
OpenProcess
SetFileApisToOEM
环境数据库(The Environment Database)
FreeEnvironmentStringsA
GetEnvironmentStrings
GetCommandLineA
GetStdHandle
SetStdHandle
进程柄表
线程(Thread)
什么是线程柄?什么是线程ID?
线程数据库
线程信息块(TIB)
线程优先
GetThreadPriority(获得线程优先级函数)
SetThreadPriority(设置线程优先及函数)
CalculateNewPriority(计算新的优先级函数)
SetPriorityClass(设置优先类函数)
GetPriorityClass(获得优先类函数)
线程执行控制
GetThreadContext和IGetThreadContext
x_ThreadContext_CopyRegs
SetThreadContext和ISetThreadContext
SuspendThread和VWIN32 SuspendThread
ResumeThread
结构异常处理
结构异常处理及参数有效化
GetCurrentDirectoryA
x_invalid_param_handler
线程局部存储器(TLS)
TlsAlloc
TlsSetValue
TlsGetValue
TlsFree
GetExitCodeThread和IGetExitCodeThread
SetLastError
GetLastError
其它线程函数
Win32Wlk程序
Win32Wlk的内部解析
小结
第四章 USER和GDI子系统
Windows 95 USER模块
USER32转换例子
32位堆
神秘的GetFreeSystemResources释放
窗口系统的混合16/32位特性
信息系统的变化
线程消息队列
单一队列系统窗口
windows 95中(H)WND结构的改变
windows 95窗口类的改变
SHOWWND程序
选择16位USER.EXE函数的伪码
USER 32并不仅仅转换成USER.EXE
HeapWalk(堆行走函数)
Windows 95中单一码支持
Windows 95 GDI模块
GDI目标
Win16应用程序可用的新Win32 GDI函数
小结
第五章 内存管理
基于页面的Windows 95内存管理
内存分页
内存分页与选择器
Windows 95的地址空间以及Win32进程
共享内存
Windows 95的“写时拷贝”(Copy on Write)
PHYS程序
利用PHYS来检测共享内存
用PHYS来测试写时拷贝(copy on write)
PHYS程序中的“好素材”(适用于高水平读者)
内存文本(先进的内容)
Windows 95内存API
VMM函数
Win32虚拟数
VirtualAlloc
mmPAGEToPC
VirtualFree
VirtualQueryEx
VirtualQuery和lVirtualQuery
VirtualProtectEx
VirtualProtect和IVirtualProtect
VirtualLock和VirtualUnlock
Win32堆函数(HEAP FUNCTlONS)
Win32堆首(heap head)与堆场(heap arenas)
Windows 95堆首(heap header)
行走堆(WALKHEAP)程序
GetProcessHeap(获得进程堆函数)
HeapAlloc(堆配置函数)和IHeapAlloc
HPAlloc
hpCarve(堆分隔函数)
ChecksumHeapBlock(堆块检验和函数)
HeapSize和IHeapSize函数(堆尺寸函数)
HeapFree和IHeapFree(堆释放函数)
hpFreeSub
HeapReAlloc和IHeapReAlloc(堆再配置函数)
HPReAlloc函数
HeapCreate函数(堆生成函数)
HPInit(堆初始化函数)
HeapDestory和IHeapDestory(堆破坏函数)
HeapValidate(堆有效化函数)
HeapCompact(堆压缩函数)
GetProcessHeaps(获取进程堆函数)
HeapLock(堆锁定函数)
HeapUnlock(堆解锁函数)
Win32局部和全局堆函数(Local and Global Heap Functions)
Win32局部堆
LocalAlloc和ILocalAlloc(局部配置函数)
LocalLock和ILocalLock(局部锁定函数)
LocalUnlock(局部解锁函数)
LocalFree和ILocalFree(局部释放函数)
LocalReAlloc和ILocalReAlloc(局部再配置函数)
LocalHandle和ILocalHandle(局部句柄函数)
LocalSize和ILocalSize(局部尺寸函数)
LocalFlags(局部标志函数)
LocalCompact(局部压缩函数)
Win32全局堆函数(Global Heap functions)
LocalShrink(局部压缩函数)
GlobalAlloc
GlobalLock
GlobalUnlock
GlobalFree
GlobalReAlloc
GlobalFlags and IGlobalFlags
GlobalWire
GlobalUnWire
GlobalHandle
GlobalSize
GlobalFix
GlobalUnFix
GlobalCompact
杂函数(Miscellaneous Functions)
WriteProcessMemory和ReadProcessMemory
(写进程内存和读进程内存函数)
GlobalMemoryStatus和IGlobalMemoryStatus
(全局内存状态数)
GetThreadSelectorEntry和IGetThreadSelectorEntry
(获取线程选择器入口函数)
C/C++编译器的malloc和new函数
小结
第六章 Windows 95的三个核心部件
VxD剖析
从其它VxD中调用VxD函数
从Winl6(保护模式)代码调用VxD函数
Win32代码调用VxD函数
从哪儿可以找到Win32 VxD服务?
VMM提供的Win32 VxD服务
应用程序调用Win32 VxD服务
分析VWIN32.VXD
VWIN32.VXD的ring 0 VxD服务API
VWIN32.VXD的16位保护模式API
VWIN32.VXD的Win32 VxD服务APl
VWIN32 TDBX
Windows 95的三个核心部件怎样通信
VWIN32的KRNL386的知识
KERNEL32.DLL的KRNL386.EXE知识
(或者说,微软公司没告诉你的东西)
KERNEL32.DLL的VWIN32知识
VWIN32的KERNEL32.DLL知识
KRNL386的KERNEL32.DLL知识
KRNL386的VWIN32知识
Win32 VxD服务侦探程序(W32SVSPY)
W32SVSPY工作的一个样本
编写W32SVSPY的技术挑战
小结
第七章 Win16模块和任务
16位模块
为什么32位的模块和进程要有16位的表示方法?
NE头
Windows 95中的模块数据库新域
段表
资源表(The Resource Table)
入口表
驻留名表和非驻留名表
HMODULE和HINSTANCE
与模块相关的函数
GetModuleHandle函数
GetExePtr函数
GetProcAddress函数
16位任务
一些关于任务的错误认识
任务数据库(TDB)
关于任务的函数
GetCurrentTask()函数
IsTask()函数
GetTaskQueue()函数
MakeProcInstance()函数
TaskFindHandle函数
SHOW16程序
小结
第八章 可移植的执行模块和COFF OBJ格式
PEDUMP程序
基本的Win32和PE概念
PE头标
节表
经常遇到的节
.text节
Borland的CODE和.icode节
.CRT节
.bss节
DATA节
.data节
.rsrc节
.idata节
.edata节
.reloc节
.tls节
.rdata节
.drective节
名字含$的节(只对OBJ/LIB文件)
.debug$S和.debug$T节
各式各样的节
PE文件引入
IMAGE_THUNK_DATA DWORD
把IMAGE_IMPORT_DESCRIPTOR和
IMAGE_THUNK_DATA并在一起
PE文件引出
引出传递
PE文件资源
PE文件基址重定位
COFF符号表
COFF调试信息
COFF行号表
PE文件和COFF OBJ文件之间的差别
COFF LIB文件
Linker成员
Longnames成员
小结
第九章 读者自身探密
探密概览
用文件转储工具探密
用侦探工具探密
用反汇编探密
反汇编的学习和技术
弄清常用代码序列和约定
一个反汇编例子
高级技巧
使用SoftIce/Windows
应用硬件断点
VAR2MAP工具
VxD.(园点)命令
识别VxD服务程序
识别Win32 VxD服务程序
识别参数有效性检查和Ixxx函数
使用调试版本
Pentium优化的代码
小结
第十章 编写Win32 API侦探程序
拦截函数
在另一个进程内接种一个DLL
用Debug API来控制目标进程
编写登记API函数的程序段
参数信息编码
函数返回值
APISPY32程序
Win32s特有的代码
APISPYLD的代码
使用APISPY32时的注意事项
在你自己的程序中拦截函数
小结
附录A 未公布的KEPNEL32.DLL链接库