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