You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Borland C++Builder 6补丁程序重启后触发EAccessViolation求助

重启后补丁指令异常的原因分析

1. 新增节的重定位信息缺失

你用CFF Explorer添加新节存放补丁代码和导入项时,没给补丁里的call指令加对应的重定位条目。Windows加载PE文件时,会靠重定位表修正内存地址;如果补丁里的call是硬编码的绝对地址且没进重定位表,一旦系统重启后DLL加载基址变动(哪怕关了ASLR,部分系统DLL更新后基址也可能变),原本正确的call目标就会偏移到shell32的固定地址,触发访问违规。

2. 导入表绑定(Binding)未更新

添加新导入项后,你没重新生成PE文件的绑定信息。Windows的绑定机制会把导入函数的实际地址提前写入IAT,避免每次加载时动态解析。要是新增的导入项没绑定,系统重启后加载程序时,可能错误覆盖补丁中call指令的目标地址,导致指向shell32的无关地址。

3. 新增节的属性配置错误

如果CFF Explorer创建的新节没设置正确的内存属性(比如没标记为IMAGE_SCN_MEM_READ | IMAGE_SCN_MEM_EXECUTE,反而错误开了可写属性),系统重启后,某些后台进程或内存管理机制可能意外修改节里的call指令内容,把它篡改成指向shell32的地址。

4. Borland C++Builder 6启动代码的兼容性问题

Borland C++Builder 6的PE加载器(启动代码)比较老旧,对后期用工具新增的节和导入项支持不好。重启后,启动代码处理导入表时,没正确识别新节里的IAT条目,导致补丁中的call指令没法关联到目标函数,反而错误指向shell32的固定地址。


内容的提问来源于stack exchange,提问作者mario russo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:33:10