首页
社区
课程
招聘
[原创]Gnu Prolog 内存大小设置不当 VirtualProtect函数487错误 启动失败修复
发表于: 2020-12-3 11:49 2905

[原创]Gnu Prolog 内存大小设置不当 VirtualProtect函数487错误 启动失败修复

2020-12-3 11:49
2905

Gnu Prolog 1.4.5
(compiled under x86_64 / Windows 7 with MSVC++)

由于Gnu Prolog Setting中默认的最大内存大小才32kb,实在不够看,所以lz在Setting里面将它调大了一些。
重启软件就闪出命令行窗口,不能打开GUI。

PwSh中执行gprolog.exe,看到以下报错:

应该是lz设置内存大小不当,导致内存页保护的函数Error了。
试着重装让其恢复默认,但是遗憾的是卸载的并不干净,程序的配置依然没有删除,重新安装后依然默认读取以前的配置,程序还是进不去……
卸载时lz注意到程序目录里面的文件是删除的很干净了,而重装回来的程序依然能读取到配置,故猜想程序的配置是保存在注册表中的。
所以思路就是删掉配置,让gprolog恢复默认,嗯,就酱。

扔进ida64,看导入表:导入表-若干注册表函数
发现确实有注册表读写操作,查看函数的Xref交叉引用,定位到sub_48FDF0。
注册表读取
可以看出是进入HK\Software\GnuProlog中读取键值,但是这个HK具体是啥我不知道(对应图中hKey参数,是一个常量),索性百度一下RegOpenKeyEx。
RegOpenKeyEx函数原型、参数
ok,这回知道常量名字是啥了,拿出masm32的window.inc打开,搜索常量名字。
常量对应的值
这回终于知道读取的是哪个主键了,HKCU。

注册表找到HKCU\Software\GnuProlog,发现果然储存着配置,直接整个注册表项干掉。
重新打开gprolog.exe,它终于正!常!启!动!了!泪目!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-12-3 11:51 被老刘NoOne编辑 ,原因: 图挂了修一下
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//