目前绝大多数的IDE都包含断点调试的功能,缺少这个,用print来调试代码,简直就是个灾难,下面我们来实现一个简陋版的“断点调试”;
环境:WIN7 x86_64 Python2.7
///了解///
调试类别:白盒调试:源码在手 黑盒调试:软件包
黑盒调试 -> 用户态(ring3);内核态(ring0)
ring3 -> WinDbg;OllyDbg; GNU(gdb):Linux ...
八个通用寄存器(习惯了32位,64位请自己查询):EAX,EDX.ECX.ESI.EDI.EBP.ESP.EBX
EAX:累加器,常用的运算操作和传递函数调用的返回值
EDX:数据寄存器,可理解为EAX的延伸
ECX:计数器
counter = 0
while counter<5#ECX = 5 每执行一次ECX -= 1 : SUB ECX 1H
print counter
counter+=1
ESI:源变址寄存器,可简单理解为存储输入数据流位置的信息,用于“读”
EDI:用于“写”
ESP:栈指针 指向栈顶(低位)
EBP:栈基指 指向栈底(高位)
EIP*:始终指向cpu当前执行的指令,缓冲区溢出原理就是利用EIP被覆盖,来执行自己构建的代码