马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
转给需要的
——以 dwc_32g_phy_tsmc16ffc_x4ns_2.00为例 一.简单的了解
DesignWare IP都是以.run文件的形式分发,需要 synopsys分发的 license和
pid才能进行解包和进一步开发。
DesignWare IP分发时按客户购买 IP分发,IP及文档中没有水印和用户特定
标识可以随便交流。
二.解包
(此方法截至 20212年发布的 IP仍有效)
需要文件及工具:
1. synopsys dw_ip
2. IDA Pro或者其他用的顺手的逆向工具
3. Centos WSL或者 synopsys支持的 Linux
4. Vim或者其他文字编辑器(能编辑 1G 以上文件的最好,.run 有贼大的)
Step 1:
用编辑器打开 run文件,搜索函数 dwGetExtractionDir(979行)修改,
a:
sub dwGetExtractorDir{
return “/mnt/h/dwe5”;<==指定一个文件夹,需要存在。为方便暂记为 dir_dwe
}
b:搜索并注释所有含有 unlink的命令,保村
Step2:
第一次运行,要求输入 pid随便输几个字,一定会报错
./dwc_32g_phy_tsmc16ffc_x4ns_2.00b.run--dir ./ip_ext
Step3:
转战 dir_dwe
.
├
── bin
│├
── dw_extract
│ └── dw_extract.linux64
└── shlib
└── libstdc++.so.6
(目录结构可能不一样,但重点是 dw_extract.linux64)
用 IDAPro打开 dw_extract.linux64(有时 dir_dwe不存在目录结构 dir_dwe下
直接是 dw_extract.linux64)
1.搜索函数 scl_lc_checkout直接在”Function name”搜索函数名或搜索二进制{83 F8 FC 74 05 83 F8 E8 75 AA }找到函数尾,patch之使 eax返回 0,多余字节 nop补齐
2.转至 sclIsValidProject可以搜索二进制{55 48 89 E5 41 57 49 89 D7 41 5641 55 41 54 49 89 CC 53 48 83 EC58 48 8975 90 48 89 7D 98 4C}来确定
定位到函数尾 moveax,ebx改成 xor eax,eax
一种简单的方法 dw_extract大致分为三种:大小分别为 5303 6586 7642KB。这三种相互独立不能混用。附件里有和谐好的三种 dw_extract,用和谐好的 dw_extract替代 DesignWare IP解压出来 dw_extract即可
3.保存更改
Step3:修改 run中的 dwUnpackExtractor函数
改成这样
sub dwUnpackExtractor{
return “/mnt/h/dwe5/bin/dw_extract”;<====指向/mnt/h/dwe5中的
dw_extract(不是 dw_extract.linux二级制文件,是一个脚本文件)
}
Step4:
第二次运行,IP就解出来了
|