问题标签 [capstone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
224 浏览

python - 顶点反汇编器 python 在每个偏移量上返回相同的指令

我正在尝试使用带有 python 绑定的 capstone 来解除 PE 文件。

但它在每个偏移量处都返回相同的 ASM 指令。

如果我继续循环,我会得到源源不断的相同输出。

有谁知道我做错了什么?因为我认为这不是 Capstone 应该如何工作的。

0 投票
0 回答
64 浏览

c++ - Capstone 反汇编程序 C++ 绑定 - cs_arch_init 未初始化

我正在做项目,他的目的是创建补丁程序,我想通过在 Capstone 中使用来添加反汇编程序,我试图运行下一个代码

由于某种原因它不起作用,从调试 cs.ci 中看到,在 cs_open 函数中,cs_arch_init 数组在他的所有单元格中都是 0x000000,这导致 cs_arch_init[arch] 为假,有人知道如何修复它吗?

0 投票
1 回答
17 浏览

python - Captone python 模块是否支持 exe 作为输入,或者数据是否需要是独立的指令二进制文件?

一些像 IDA 或 Ghidra 这样的反汇编程序会使用 exe 并输出指令。其他反汇编程序要求用户解析 PE 标头,隔离指令的二进制文件并将其传入。

我正在尝试学习使用 Capstone Python API,但.py 文档只显示了正在传递的隔离指令的缓冲区,如下所示:

但我想做类似的事情:

无需亲自解析 PE 标头以隔离指令数据。Captone 的 API 是否支持此功能?

0 投票
0 回答
79 浏览

c# - 从 C# .Net 中的反汇编文件中获取特定值

我在 C# 中有一个脚本,它使用Gee.Capstone包来自动反汇编文件。我不熟悉整个概念,所以我只是尝试根据在线教程做我需要的事情。

我有一些范围格式的虚拟地址。例如:0x0122FFB0-0x01230028

当我使用另一个 GUI(例如 Cutter)反汇编文件时,我得到类似这样的东西

我想从中获取值 2 orr w1, wzr, 2。一般来说,我想要的值总是采用 的格式orr w1, wzr X,但在两个地址的范围内并不总是以相同的顺序排列。

假设我有一个包含所有范围的列表,有没有办法识别我需要的行并获取X值?

我离得越近就是这个

其中att是我存储了虚拟地址范围StartEnd它的对象。但是,我找不到任何方法从obj对象中获取我需要的信息。

编辑:没有必要继续使用 Capstone。如果有解决方案可以通过另一个包获得它,我可以接受。

0 投票
1 回答
154 浏览

c - 我无法使用 capstone 库从二进制文件中读取文本部分

我有一个只打印“hello”的小二进制文件,我使用 libbfd 和 readelf 的命令导出 .text 部分, readelf -x .text a.out它们都给了我这个输出

我使用在线反汇编程序,它能够反汇编它,但是使用capstone使用此代码:

然后我用 gcc 构建它gcc disas.c -lcapstone

运行此代码后,我将始终得到以下输出:

Disassembly error: OK (CS_ERR_OK) 从这一行开始fprintf(stderr, "Disassembly error: %s\n", cs_strerror(cs_errno(dis))); ,这个函数n = cs_disasm(dis, code, sizeof(code), 0x2000, 0, &insns);总是返回零,这表明它没有反汇编和东西,有什么解决方案吗?

0 投票
2 回答
70 浏览

capstone - 顶点错误的 regs_read/regs_write 值

我正在尝试使用regs_readand regs_write,但它不起作用:

这就是我得到的

0 投票
0 回答
97 浏览

python - 在 capstone python 中获取指令的操作码

我知道操作码是我自己提供给 capstone 进行反汇编的,但我想知道反汇编了什么操作码以获得提供的指令。不幸的是,我找不到capstone.CsInsn调用什么键来获取操作码。

我尝试了以下键,但它们都不是操作码:

我只是想知道\xdb操作码被反汇编为上述汇编指令。

0 投票
0 回答
35 浏览

python - 顶点吞噬了所有的记忆

我正在使用 python capstone 反汇编一段 400MB 的代码。但是一旦它for循环到disasm下面,我在任务管理器中看到的就是脚本吃掉了内存并最终停止响应。之后我试图在循环中删除拆卸的部分,但它仍然没有帮助。

代码:

我发现问题出在md.skipdata,如果我删除此选项,内存耗尽就会停止。谁能告诉这里出了什么问题,以及如何在不保留太多内存的情况下逐部分反汇编我的代码?

0 投票
0 回答
68 浏览

assembly - 如何使用 c++ libcapstone 获取 RSP 寄存器中的值?

我正在尝试mylib.so使用 capstone c++ 库编写一个库(调用)并LD_PRELOAD查找位于二进制文件中的系统调用指令的位置(该二进制文件包含一些在内联汇编中编写的系统调用),以及这些系统调用是什么(即 SYS_open、SYS_read、 ETC)。

我使用命令LD_PRELOAD=mylib.so <target_program>运行二进制文件并在“运行时”中进行二进制分析,但不是静态的。

我已经能够使用以下方法找到并反汇编系统调用指令libcapstone

但问题是如果值移动到 %rax 不是 IMM 操作数,我无法确定它是哪种系统调用。例如,如果反汇编结果是:

我可以知道这个系统调用是一个getpid()since __NR_getpid == 39。但是如果反汇编的结果是:

(抱歉上面的汇编代码混淆了,我还在学习汇编)

这是我的想法,如果我错了,请纠正我。我认为应该可以在这个 %rsp 中获取值,因为目标 binray 应该已经映射到内存中(但由于 LD_PRELOAD 尚未运行)。

当我的顶点代码正在执行时,我还假设上面%rsp0x8(%rsp)值不是“当前”堆栈指针的值。

我理解正确吗?mov %rax, 0x8(%rsp)在执行该指令期间,我应该如何获得 RSP 寄存器将包含的地址?

非常感谢您的帮助!

0 投票
0 回答
22 浏览

c++ - 由于体系结构不受支持,Capstone 代码未编译

Capstone 不断给我一个Failed on cs_open() with error returned: 2,这显然意味着不支持为特定架构(即 arm)运行的代码,因为 capstone 必须针对不同的架构进行编译(或者可以与所有架构一起使用)。我在我的 cmake 项目中使用 github 上的 WIN64 版本中提供的 .lib 和 .dll 文件,如下所示

并且该版本设置了所有架构,为什么它不起作用?