发个易语言动态调用(通过置入代码)DLL的东西.稍为修改下就能像C一样简单方便的使用内联汇编.晕我发不了源码粘贴其中一个子程序吧.对比下易方式调用ReadProcessMemory函数和现在有什么不一样就能看明白了这里主要是学会理解易程序的参数和变量在寄存器里的地址变化.弄清楚了就能像C一样方便使用内联汇编.
.版本 2
.子程序 _按钮2_被单击, , , 动态调用读内存
.局部变量 hProcess, 整数型
.局部变量 内存地址, 整数型
.局部变量 内存数据, 整数型
读内存数据 (Process, 4202496, 内存数据, 4, 0)
编辑框1.内容 = 取十六进制文本 (内存数据)
.版本 2
.子程序 读内存数据, 整数型, , C方式动态调用DLL成功返回1失败返回0
.参数 hProcess, 整数型, , [ebp+8]
.参数 lpBaseAddress, 整数型, , 内存地址[ebp+0c]
.参数 lpBuffer, 整数型, 参考, 数据指针[ebp+10]
.参数 nSize, 整数型, , 长度[ebp+14]
.参数 lpNumberOfBytesWritten, 整数型, , 实际写出长度[ebp+18]
.局部变量 装载句柄, 整数型, , , ebp-4
.局部变量 函数入口, 整数型, , , ebp-8
装载句柄 = LoadLibraryExA (“kernel32.dll”, 0, 0)
函数入口 = GetProcAddress (装载句柄, “ReadProcessMemory”)
.如果真 (装载句柄 > 0)
' “push dword ptr ss:[ebp+18]” 255, 117, 24
' “push dword ptr ss:[ebp+14]” 255, 117, 20
' “push dword ptr ss:[ebp+10]” 255, 117, 16
' “push dword ptr ss:[ebp+0c]” 255, 117, 12
' “push dword ptr ss:[ebp+08]” 255, 117, 8
' “call dword ptr ss:[ebp-08]” 255, 85, 248 //这里可以改成CALL EAX 255, 208
' MOV EAX,DWORD PTR SS:[EBP+10] 139,69,16
' “mov esp,ebp” 139, 229,
' “pop ebp” 93
' “retn 14” 194, 20, 0
置入代码 ({ 255, 117, 24, 255, 117, 20, 255, 117, 16, 255, 117, 12, 255, 117, 8, 255, 85, 248, 139, 229, 93, 194, 20, 0 })
' 置入代码 ({ 255, 117, 24, 255, 117, 20, 255, 117, 16, 255, 117, 12, 255, 117, 8, 255, 85, 248, 139, 69, 16 })
FreeLibrary (装载句柄)
返回 (1)
.如果真结束
返回 (0)
|