|
一般回调函数,调用约定都是stdcall,易语言取指针取到的也是stdcall的,今天遇到个cdecl调用约定的回调函数,刚开始想简单了,想着直接在函数中置入代码,截断函数,让他以cdecl方式返回
结果不行,od看了下, &取到的地址,和函数真正地址不一样,不知道易语言怎么封装了,多了一层跳板
最终用字节集构造了一段汇编代码,模拟了一个cdecl调用约定的函数,然后里面再去调用易语言定义好的函数,就行通了
备忘一下方法:
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | cx_shellcode | 字节集 | |
cx_shellcode = { 85, 137, 229, 255, 117, 20, 255, 117, 16, 255, 117, 12, 255, 117, 8, 184 } + 到字节集 (&LPDEVICEPROC ) + { 255, 208, 137, 236, 93, 195, 204, 204, 204, 204, 204, 204, 204, 204, 204 }|
LPDEVICEPROC | | | |
tDev | 整数型 | | | | tParam | 整数型 | | | | nCode | 整数型 | | | | nData | 整数型 | | | | 调试输出 (tDev, tParam, nCode, nData, 指针到文本 (tParam )) s = “123456”EVS_Open (取窗口句柄 (), 取变量数据地址 (cx_shellcode ), 取变量数据地址 (s ))
|
|