CUDA 反编译工具

cuda binary

1.Overview

1.1什么是CUDA二进制文件

cuda 二进制文件 (.cubin .elf)是一种 ELF格式的文件,其中包含可执行代码部分,还包含了一些 符号、relocator、debug 信息等其他内容。

默认情况下,CUDA编译器 nvcc 可以讲cubin 文件,嵌入到 host 的可执行文件中。也可以 使用 nvcc -cubin 来编译直接得到 x.cubin 文件。

注意: 更多细节参见 nvcc 的用法。

1.2两种反编译工具

两个 反编译工具: cuobjdump and nvdisasm

1.2.1 相同点:都可以 反编译 .cubin 文件

1.2.2 不同点: 1.cuobjdump可以 从 各种 二进制文件中,提取出 .ptx 代码 和 cubin 代码 其中 包括 :1)Host binaries

2)External fatbinary files

nvdisasm 则不能。

2.nvdisasm 可以进行 控制流分析并输出 和 显示高级选型

2.cuobjdump

2.1用法

格式 : 命令 选项 文件cuobjdump accepts a single input file each time it’s run. The basic usage is as following:

反编译->得到 sass 汇编代码To disassemble a standalone cubin or cubins embedded in a host executable and show CUDA assembly of the kernels, use the following command:

提取 elf 代码 To dump cuda elf sections in human readable format from a cubin file, use the following command:

提取 ptx 代码To extract ptx text from a host binary, use the following command:

其他常用选项nvidia-CUDA Binary Utilities-2.2. Command-line Options

2.2例子

3.nvdisasm

3.1 Usage

使用格式nvdisasm accepts a single input file each time it’s run. The basic usage is as following:

常用选项

更多详见nvidia-CUDA Binary Utilities-3.2. Command-line Options

获取 kernel 的控制流图

To get the control flow graph of a kernel, use the following:

注意:控制流图 需要 Graphviz 中的 dot 命令 ,要先安装在电脑中才可用。 另 cubin 必须是 计算能力 3.0 以上的才可以

3.2 Example

其实 反编译的结果 是类似的

特别的是 其 生成的 控制流图。

eg

发表评论

电子邮件地址不会被公开。 必填项已用*标注