d(x)

用于输出不同格式的内存地址
1. da addr 按照 ASCII 显示
2. dd addr 显示 4 Bytes 的 值
3. df addr 显示 4 Bytes 的 float
4. dw addr 显示 2 Bytes 的 word

!process

!process 0 0 -> 用于 dump 当前所有的进程

.process

.process /i /p 非侵入式进入进程上下文 .process /i /p xxxxx

b(x)

设置断点
1. bp addr 设置断点
2. bl 列出断点
3. bc x 删除x号断点
4. bc * 删除所有断点

dt

用于显示结构体
1. dt win32k!tagMENU 显示结构体
2. dt win32k!tagMENU addr 用这个地址显示结构体
3. dt *!tagMENU 查找 tagMENU 这个结构体

x

用于搜索函数
1. x win32k!*MENU 查找win32k内MENU结尾的函数

.reload

1. .reload 重新加载符号表
2. .reload /f /user 重新载入用户符号表

ld

ld * 载入全部的符号

C 的 Callback


void(*func)(int a, int b);

C++ 的 Callback


class CXXX {
public:
BOOL target(int a, int b) { return a == b; }
}
int main() {
BOOL(CXXX::*func)(int a, int b);
CXXX obj;
BOOL result = FALSE;
func = &CXXX::target;
result = (obj->*func)(1, 2);
}

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs

系统加载Dll的时候会优先从系统文件夹内找

msi的那个问题好像可以对照这个表看看