别人笑我太疯癫,我笑他人看不穿

c++调用易语言编写的dll导致程序卡死

星期一 2018/05/28 17:31:29        452 view

同事c++程序中调用了我用易语言编写的dll,测试的时候发现程序偶尔会有卡死的情况,经过同事调试后告诉我,原因是在调用LoadLibraryW加载我编写的dll的时候一直阻塞没有返回导致卡死,问我在初始化函数里面干了什么!what?我初始化函数里面什么也没干啊!于是我编译了一个空dll测试,发现还是会卡死,这...我就怀疑是易语言的锅了,之前我都是用的"静态编译"模式编译,抱着试一试的心态,我又用"编译"模式编译了一个空dll测试,奇迹的是竟然没有卡死了!然后换成之前使用的dll用"编译"模式编译测试也没有卡死.好吧,我决定来看一看"静态编译"模式编译的dll都干了什么???


首先用易语言编写一个dll,导出一个main函数,用"静态编译"模式编译生成test.dll,然后编写一个程序调用test.dll导出的main函数,编译生成test.exe.


然后用API Monitor监视test.exe.


发现了什么...没错,它竟然调用CreateWindowExA创建了一个类名为"_EL_HideOwner"的窗口...


接着我又看了下"编译"模式编译生成的test.dll.

同样创建了窗口,不一样的是调用模块为krnln.fne易语言核心支持库.


这时候我们就可以猜到估计是这个创建窗口搞的鬼了,这个窗口对于我们来说毫无用处,于是在c++程序中hook了CreateWindowExA函数,程序顺畅运行!问题解决!不得不说这真是一个深坑.


[游客] 那么吊 说: 星期一 2018/05/28 19:15:25

那么吊


回复
[admin] Gker 说: 星期一 2018/05/28 19:27:50

[坏笑]就是那么吊


回复
[游客] 说: 星期一 2018/05/28 20:05:45

哦哦”


回复
[游客] 名侦探柯南 说: 星期一 2018/05/28 21:46:21
[游客] 大嘴 说: 星期四 2018/05/31 01:02:45

mark


回复
[admin] Gker 说: 星期四 2018/05/31 01:03:25

哈哈


回复