-
-
[原创] Unicorn 编译与 python 绑定
-
发表于:
2019-8-17 15:56
5185
-
[原创] Unicorn 编译与 python 绑定
一、unicorn的编译
(1) 从官网下载最新的Unicorn源码
https://github.com/unicorn-engine/unicorn
(2)分别解压两份到D:\uc32和D:\uc64
主要出于编译32位和64位等不同版本时,避免配置干扰或重新编译时出现各种不合预期的情况。
(3)根据官方说明,这里使用64位(任意)的msys2
https://github.com/unicorn-engine/unicorn/blob/master/docs/COMPILE-WINDOWS.md
(4)分别启动msys2的32位和64位环境编译版本,确保官方说明的相关命令应该无错执行
(5)再msys2中各环境中进入uc32和uc64
(6)根据官方说明执行相关命令,即可编译完成
应该到msys2的ming32和ming64目录的bin下分别复制响应的依赖DLL到我们需要的路径。
二、python的绑定
(1)分别将【一】的成果,主要是 unicorn.dll和unicorn.lib(当然还有依赖的msys2的动态库)
复制到uc32\bindings\python\prebuilt目录(64位版本复制到响应uc64的目录)
此目录再python setup时会搜索需要的动态库,如果不放置对位置,没法成功。
(2)配置cmd环境适用python32位版本,进入uc32的prebuilt目录,编译whl并安装
python setup.py bdist_wheel
pip install unicorn-1.0.2-py2.py3-none-win32.whl
同理,配置cmd环境适用python64位版本,进入uc64的
prebuilt目录,编译whl并安装
python setup.py bdist_wheel
pip install unicorn-1.0.2-py2.py3-none-win_amd64.whl
注意:为啥不用 egg和easy_install ?
测试Anaconda2的32版本是python 2.7.12版本的,对egg方式没问题
但Anaconda2的64版本是python 2.7.13版本的,ctypes再加载egg缓存路径是适用了unicode,造成错误,为避免错误,毕竟IDA7.X也是64位版本。
这是主要需要适配版本。
以及方便我们的一些其他操作,我们适用whl的方式直接将unicorn装到size-packages中。
python setup.py bdist_egg
当然,我们也可以直接python安装官方的版本,不过官方目前只提供1.0.1版本,一些bug坑还是很难受。
附件提供这次编译测试的32位和64位python的whl安装版(分包源于单各附件不超过8M,每个whl大小9M)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课