问题标签 [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.
python - 顶点反汇编器 python 在每个偏移量上返回相同的指令
我正在尝试使用带有 python 绑定的 capstone 来解除 PE 文件。
但它在每个偏移量处都返回相同的 ASM 指令。
如果我继续循环,我会得到源源不断的相同输出。
有谁知道我做错了什么?因为我认为这不是 Capstone 应该如何工作的。
c++ - Capstone 反汇编程序 C++ 绑定 - cs_arch_init 未初始化
我正在做项目,他的目的是创建补丁程序,我想通过在 Capstone 中使用来添加反汇编程序,我试图运行下一个代码
由于某种原因它不起作用,从调试 cs.ci 中看到,在 cs_open 函数中,cs_arch_init 数组在他的所有单元格中都是 0x000000,这导致 cs_arch_init[arch] 为假,有人知道如何修复它吗?
python - Captone python 模块是否支持 exe 作为输入,或者数据是否需要是独立的指令二进制文件?
一些像 IDA 或 Ghidra 这样的反汇编程序会使用 exe 并输出指令。其他反汇编程序要求用户解析 PE 标头,隔离指令的二进制文件并将其传入。
我正在尝试学习使用 Capstone Python API,但.py 文档只显示了正在传递的隔离指令的缓冲区,如下所示:
但我想做类似的事情:
无需亲自解析 PE 标头以隔离指令数据。Captone 的 API 是否支持此功能?
c# - 从 C# .Net 中的反汇编文件中获取特定值
我在 C# 中有一个脚本,它使用Gee.Capstone包来自动反汇编文件。我不熟悉整个概念,所以我只是尝试根据在线教程做我需要的事情。
我有一些范围格式的虚拟地址。例如:0x0122FFB0-0x01230028
当我使用另一个 GUI(例如 Cutter)反汇编文件时,我得到类似这样的东西
我想从中获取值 2 orr w1, wzr, 2
。一般来说,我想要的值总是采用 的格式orr w1, wzr X
,但在两个地址的范围内并不总是以相同的顺序排列。
假设我有一个包含所有范围的列表,有没有办法识别我需要的行并获取X
值?
我离得越近就是这个
其中att
是我存储了虚拟地址范围Start
和End
它的对象。但是,我找不到任何方法从obj
对象中获取我需要的信息。
编辑:没有必要继续使用 Capstone。如果有解决方案可以通过另一个包获得它,我可以接受。
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);
总是返回零,这表明它没有反汇编和东西,有什么解决方案吗?
capstone - 顶点错误的 regs_read/regs_write 值
我正在尝试使用regs_read
and regs_write
,但它不起作用:
这就是我得到的
python - 在 capstone python 中获取指令的操作码
我知道操作码是我自己提供给 capstone 进行反汇编的,但我想知道反汇编了什么操作码以获得提供的指令。不幸的是,我找不到capstone.CsInsn
调用什么键来获取操作码。
我尝试了以下键,但它们都不是操作码:
我只是想知道\xdb
操作码被反汇编为上述汇编指令。
python - 顶点吞噬了所有的记忆
我正在使用 python capstone 反汇编一段 400MB 的代码。但是一旦它for
循环到disasm
下面,我在任务管理器中看到的就是脚本吃掉了内存并最终停止响应。之后我试图在循环中删除拆卸的部分,但它仍然没有帮助。
代码:
我发现问题出在md.skipdata
,如果我删除此选项,内存耗尽就会停止。谁能告诉这里出了什么问题,以及如何在不保留太多内存的情况下逐部分反汇编我的代码?
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 尚未运行)。
当我的顶点代码正在执行时,我还假设上面%rsp
的0x8(%rsp)
值不是“当前”堆栈指针的值。
我理解正确吗?mov %rax, 0x8(%rsp)
在执行该指令期间,我应该如何获得 RSP 寄存器将包含的地址?
非常感谢您的帮助!
c++ - 由于体系结构不受支持,Capstone 代码未编译
Capstone 不断给我一个Failed on cs_open() with error returned: 2
,这显然意味着不支持为特定架构(即 arm)运行的代码,因为 capstone 必须针对不同的架构进行编译(或者可以与所有架构一起使用)。我在我的 cmake 项目中使用 github 上的 WIN64 版本中提供的 .lib 和 .dll 文件,如下所示
并且该版本设置了所有架构,为什么它不起作用?