Process Explorer
Process Explorer是Windows操作系统下最优秀的进程管理工具,画面左上侧Parent/Child树结构显示当前运行的进程,右侧显示个进程的PID、CPU占有率、注册信息等,画面下方显示的是加载到所选进程的DLL信息,或者当前选中进程的所有对象句柄。 优点:
Parent/Child进程树结构。 以不同颜色显示进程运行/终止。 进程的Suspend/Resume功能。 进程终止功能。 检索DLL/Handle。
函数调用约定
栈就是定义在进程中的一段内存空间,向低地址方向拓展,且其大小被记录在PE头中,也就说,进程运行时确定栈内存的大小。 cdecl
cdecl是主要在C语言中使用的方式,调用者负责处理栈。
#include "stdio.h"
int add ( int a, int b)
{
return ( a+ b) ;
}
int main ( int argc, char * argv[ ] )
{
return add ( 1 , 2 ) ;
}
add()函数的参数1、2以逆序方式压入栈,调用add()函数(401000)后,使用ADD ESP,8命令整理栈,调用者main函数直接清理压入栈的函数参数,这样的方式即使cdecl。
stdcall
stdcall方式常用于Win32 API,该方式由被调用者清理栈,C语言默认的函数调用方式为cdecl,若想使用stdcall方式编译源码,只要使用_stdcall关键字即可。
#include "stdio.h"
int _stdcall add ( int a, int b)
{
return ( a+ b) ;
}
int main ( int argc, char * argv[ ] )
{
return add ( 1 , 2 ) ;
}
main函数在调用add函数后,省略了清理栈的代码,栈的清理工作由add函数中最后的RETN 8命令来执行,RETN 8命令的含义为RETN + POP 8字节,即返回后使ESP向上移动8字节。
fastcall
fastcall方式与stdcall方式基本类似,但该方式通常会使用寄存器去传递那些需要传递函数的部分参数(前2个),若某函数有4个参数,则前2个参数分别使用ECX、EDX寄存器传递。 fastcall方式的优势在于可以实现对函数的快速调用,因为寄存器要远比访问内存的速度快的多。