使用fxdis反汇编HLSL字节码

大佬们太厉害了,近来出现了将核心算法藏在HLSL的bytecode中的趋势。如果遇到此类问题,获取核心算法的关键在于找到编译好的shader在代码中的位置,然后利用DirectX的D3Ddisassemble()反编译shader得到HLSL,从而分析得出真正的算法。或者,直接使用fxdis反汇编 shader字节码。


下面演示怎样用 fxdis反汇编shader字节码。


1. 下载fxdis代码

https://code.google.com/archive/p/fxdis-d3d1x/


2. 使用VS2008或VS2010编译成win32程序。


3. 如果编译过程中出现没有找到d3dcompiler.h的错误,则可以判断系统没有安装DirectX SDK。

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812


4. 安装完DirectX SDK后再重新编译fxdis项目,在debug目录下生成了fxdis.exe。


5. 测试:

假设有一个写有HLSL字节码的文件test.bin

执行debug/fxdis.exe test.bin,将获取下列汇编代码

附:

大家可能有疑问:系统是怎样由HLSL文件生成字节码的呢?

它是由DirectX SDK中的fxc.exe将*.hlsl文件编译为字节码(/Fo)或汇编代码(/Fc)的。

fxc /Od /T ps_4_0 test.hlsl /Fo test.bin /Fc test.txt

上述例子中的test.hlsl长成这样

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容