阿杰 发表于 2009-9-14 15:14:58

【开源】动态调用子程序的机器码

<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">&nbsp;&nbsp;&nbsp; GetWindowTextA函数地址 = 取程序地址_ (DLL模块句柄, “GetWindowTextA”)<br/>&nbsp;&nbsp;&nbsp; .如果 (GetWindowTextA函数地址 ≠ 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 标题文本 = 取空白文本 (100)&nbsp; ' 缓冲区大小为100<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文本指针 = 取文本型指针 (标题文本)&nbsp; ' 文本参数和字节集参数,不能直接代入,需要取指针<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 动态执行取窗口标题 (GetWindowTextA函数地址, 取窗口句柄 (), 文本指针, 100)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 信息框 (标题文本, #信息图标, “当前窗口标题”)</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; .否则<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 信息框 (“DLL中没有这个函数”, 0, )<br/>&nbsp;&nbsp;&nbsp; .如果结束</font></p>
<p><font face="Verdana">&nbsp;&nbsp;&nbsp; 释放动态链接库_ (DLL模块句柄)<br/>.否则<br/>&nbsp;&nbsp;&nbsp; 信息框 (“载入DLL失败”, 0, )<br/>.如果结束</font></p><font face="Verdana">
<p><br/>.子程序 动态执行取窗口标题, 整数型<br/>.参数 函数地址, 整数型, , 函数地址必须为第一个参数,调用时会重新调整参数排列的,后面的参数与API声明一样了<br/>.参数 窗口句柄, 整数型, , 欲获取文字的那个窗口的句柄<br/>.参数 缓冲区指针, 整数型, , 预定义的一个缓冲区,至少有cch+1个字符大小;随同窗口文字载入<br/>.参数 缓冲尺寸, 整数型, , lp缓冲区的长度;</p>
<p>' push ebp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;------------这两句已经是易原有的<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&nbsp; 修改返回地址<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>

马大哈 发表于 2009-9-15 13:46:16

<p>易语言越来越强大了啊.</p>
<p>&nbsp;</p>
<p>也许真有一天会农村包围城市..........</p>

ccini 发表于 2010-9-18 19:18:29

不错,好东西还是蛮多的!
页: [1]
查看完整版本: 【开源】动态调用子程序的机器码