修正ATI_FrameBuffers_Edition提取的帧缓冲区
我也是闲时弄一下,大家觉得有用就去折腾,觉得没用就忽略吧!
第一步:前期准备工作:
* 参考过:AMD自定义显卡接口-教程整理,深入探索AMD显卡Framebuffer结构
* 由于ATI_FrameBuffers_Edition.php很久没有更新,执行中有很多错误,且提取的帧缓冲也有些不对,需修正。
* 从论坛中得知显卡的类型数据如下表:
* 从网上找到AMD9500Controller.kext提供Orinoco真实的原始数据如下:
Orinoco (6个接口) DP,DP,HDMI,HDMI,DDVI,DP
00040000 04030000 00010101 00000000 12040601 00000000
00040000 04030000 00010201 00000000 22050403 00000000
00080000 04020000 00010300 00000000 11020102 00000000
00080000 04020000 00010400 00000000 21030504 00000000
04000000 04000000 00010500 00000000 00000306 00000000
00040000 00010000 00014601 00000000 20010000 00000000
第二步:用ATI_FrameBuffers_Edition提取AMD9500Controller.kext帧缓冲区
* 打开终端,输入php,空一格,后面拖入ATI_FrameBuffers_Edition.php,回车执行。
注:MacOS 12后不提供php命令了,需要安装。上网搜安装方法。
AMD_FrameBuffers of 11.1 php脚本修复版
提取的帧缓冲有些不对,见下图。只需要注意红线部分。由于我的显卡是RX570,由AMD9500Controller.kext提供数据,所以往下拉到--------AMD9500Controller.kext--------
* 用记事本,把所有AMD9500Controller.kext缓冲数据,类似红线地方都拷贝记录下来。
第三步:对提取的帧缓冲区进行修正
* 从/System/Library/Extensions中把AMD9500Controller.kext拷贝到桌面,方便使用。
* 用二进制编辑工具比如Hex Fied打开AMD9500Controller.kext内的二进制文件( Contents-- MacOS-- AMD9500Controller)
按⌘F搜索com.apple.kext.AMD9500Controller,会搜到好几个,
上文中我已经用文本保存了AMD9500Controller所有帧缓冲区,知道第一个是Orinoco (6) @ 0x735fb
6个接口,偏移地址为0735fb,但这个偏移地址有点误差,我们可以验证一下误差多少。
点击Hex Fied菜单Edit---Jump to Offset,输入偏移地址0x735fb,回车。
见图偏移地址0x735fb所指向是红箭头指的光标处。在前期准备工作中,我们知道Orinoco真实的原始数据有6个接口第一个接口是DP,代码是00040000,上图中AMD9500Controller从Orinoco开始第一个00040000,蓝线中,于是我们从箭头光标处往上数,共每两个数为一个地址,直到数完蓝线,共误差了54个数即27个地址。
* 打开Hackintool工具,用里面的计算器计算如下图:16进制空白框输入735fb,得到10进制472571
472571-27=472544,再将472544换算为16进制为:
这样我们得到AMD9500Controller中Orinoco真实的偏移地址为:0x735E0
* 点击Hex Fied菜单Edit---Jump to Offset,输入Orinoco真实的偏移地址:0x735E0,如图下图,往下数六个接口(黄色部分),然后拷贝到记事本。
* 修正前后对比如下
修正前:
Orinoco (6) @ 0x735fb
000000000004000004030000000101010000000012040601
000000000004000004030000000102010000000022050403
000000000008000004020000000103000000000011020102
000000000008000004020000000104000000000021030504
000000000400000004000000000105000000000000000306
000000000004000000010000000146010000000020010000
修正后:
Orinoco (6) @ 0x735E0
00040000 04030000 00010101 00000000 12040601 00000000
00040000 04030000 00010201 00000000 22050403 00000000
00080000 04020000 00010300 00000000 11020102 00000000
00080000 04020000 00010400 00000000 21030504 00000000
04000000 04000000 00010500 00000000 00000306 00000000
00040000 00010000 00014601 00000000 20010000 00000000
* 同理 比如Guariba (6个接口) 错误的偏移地址为0x73e7b。经过计算后得出真是的偏移地址0x73E60
修正前:
Guariba (6) @ 0x73e7b
000403000000010201000000002205040300000000000400
000403000000010301000000001102010200000000000800
000402000000010400000000002103050400000000040000
000402000000010500000000000000030600000000000400
000001000000010601000000002001020500000000000400
000403000000010101000000001204060100000000000400
修正后:
Guariba (6) @ 0x73E60 DP,DP,DP,HDMI,DDVI,DP
00040000 04030000 00010101 00000000 12040601 00000000
00040000 04030000 00010201 00000000 22050403 00000000
00040000 04030000 00010301 00000000 11020102 00000000
00080000 04020000 00010400 00000000 21030504 00000000
04000000 04020000 00010500 00000000 00000306 00000000
00040000 00010000 00010601 00000000 20010205 00000000
|