Windbg 使用

1. 软件断点原理

X86 程序中 软件断点的 INT3 二进制代码 opcode 是 0xcc(烫)。让调试器中下软件断点时,调试器会把下断点的 这个位置的 opcode 先转变为 0xCC 当程序运行到这里 停下 才会 将这个位置 修改为 原来的 opcode

2. 函数调用约定

stdcall

int __stdcall function(int a,int b)

(1) 参数从右向左压栈

(2) 函数的堆栈平衡由被调用函数执行

(3) 在函数名的前面用下划线修饰,在函数名的后面由@来修饰并加上栈需要的字节数的空间(_sumExample@8

cdecl

int __cdecl function(int a,int b)//明确指出C调用约定

(1) 参数从右向左压栈

(2) 函数的堆栈平衡由被调用函数执行

(3) 仅在函数名前加上一个下划线前缀,格式为_functionname。

(4) 参数不固定

fastcall

int fastcall function(int a,int b)

(1) 函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈

(2) 函数的堆栈平衡由被调用函数执行

(3) 函数名修改规则同stdcall