.版本 2
.子程序 _按钮1_被单击 .局部变量 DLL模块句柄, 整数型 .局部变量 GetWindowTextA函数地址, 整数型 .局部变量 标题文本, 文本型 .局部变量 文本指针, 整数型
DLL模块句柄 = 载入动态链接库_ (“user32.dll”) .如果 (DLL模块句柄 ≠ 0)
GetWindowTextA函数地址 = 取程序地址_ (DLL模块句柄, “GetWindowTextA”) .如果 (GetWindowTextA函数地址 ≠ 0) 标题文本 = 取空白文本 (100) ' 缓冲区大小为100 文本指针 = 取文本型指针 (标题文本) ' 文本参数和字节集参数,不能直接代入,需要取指针 动态执行取窗口标题 (GetWindowTextA函数地址, 取窗口句柄 (), 文本指针, 100) 信息框 (标题文本, #信息图标, “当前窗口标题”)
.否则 信息框 (“DLL中没有这个函数”, 0, ) .如果结束
释放动态链接库_ (DLL模块句柄) .否则 信息框 (“载入DLL失败”, 0, ) .如果结束
.子程序 动态执行取窗口标题, 整数型 .参数 函数地址, 整数型, , 函数地址必须为第一个参数,调用时会重新调整参数排列的,后面的参数与API声明一样了 .参数 窗口句柄, 整数型, , 欲获取文字的那个窗口的句柄 .参数 缓冲区指针, 整数型, , 预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入 .参数 缓冲尺寸, 整数型, , lp缓冲区的长度;
' push ebp <------------这两句已经是易原有的 ' mov ebp, esp 置入代码 ({ 139, 69, 8, 139, 93, 4, 137, 93, 8, 93, 91, 255, 224 }) ' mov eax, dword ptr [ebp+08] 取得第一个参数的函数地址 ' mov ebx, dword ptr [ebp+04] 取得返回地址 ' mov dword ptr [ebp+08], ebx 修改返回地址 ' pop ebp ' pop ebx 平栈,去掉第一个参数 ' jmp eax 跳到函数地址 返回 (0)
.子程序 取文本型指针, 整数型 .参数 文本, 文本型
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 }) ' mov eax, dword ptr [ebp+08] ' mov eax, dword ptr [eax] ' leave ' ret 0004 返回 (0)
.子程序 取字节集指针, 整数型, , 单维数组也可以用这个代码 .参数 字节集, 字节集
置入代码 ({ 139, 69, 8, 139, 0, 133, 192, 15, 132, 3, 0, 0, 0, 131, 192, 8, 201, 194, 4, 0 }) ' mov eax, dword ptr [ebp+08] ' mov eax, dword ptr [eax] ' test eax, eax ' je 00000003 ' add eax, 00000008 ' leave ' ret 0004 返回 (0)
ZOmN1FlQ.rar
(2.27 KB, 下载次数: 23269)
|