2.4.1 C程序解释

“要弹出一个Windows对话框,user32.dll中的MessageBox函数可以帮助我们完成这个功能。”老师说道。

“简单的说,程序只要一句话,实现如下。”

#include "windows.h"
int main(int argc, char* argv[])
{
         LoadLibrary("user32.dll");
         MessageBox(0, "ww0830","ww", 1);         
         return 0;
}

“首先,‘LoadLibrary("user32.dll")’是加载user32.dll动态链接库,大家都应该清楚吧!”

“然后,‘MessageBox(0, "ww0830","ww", 1)’是弹出Windows对话框。我们执行,可以看到对话框的标题是‘ww’,里面的内容是‘ww0830’。如图2-16,好看多了吧?”

古风核对了一下说道:“哦!那说明MessageBox函数带的第二个参数‘ww0830’是对话框内容,第三个参数‘ww’是标题内容?”

“恩,是的!”

“那还有第一个和最后一个参数呢?一个用的是0,另一个用的是1,又代表什么意思呢?”古风继续问道。

“呵呵!我们看看官方(微软)给的定义吧!第一个参数的帮助信息如下:”

hWnd 
[in] Handle to the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.

“意思是,第一个参数表明对话框所属的窗口句柄。如果第一个参数为NULL(即0),那么对话框不属于任何窗口。这里我们用的就是0,弹出不属于任何窗口的对话框。”

“而最后一个参数,是表明对话框的类型。0代表MB_OK,即只有一个‘OK’按钮;1代表MB_OKCANCEL,对话框会有‘OK’和‘Cancel’两个按钮。这里我们用的就是1,两个按钮的对话框比较好看吧!”

“对话框还有很多类型,比如MB_RETRYCANCEL、MB_YESNO、MB_YESNOCANCEL等,大家可以下去自己看看。”

“这里我们接着分析汇编和ShellCode的生成。”