如何在拆卸过程中分离ARM指令和数据

如何在拆卸过程中分离ARM指令和数据,arm,thumb,objdump,Arm,Thumb,Objdump,我正在编写/(使用binutils)一段代码来手动分解thumb2(16位和32位)指令。 我面临着一个区分真正的ARM指令和数据部分的问题 最大的问题是指令没有对齐。 所以当我尝试读取32位指令时,很多时候它实际上与下一条指令重叠 请帮忙 谢谢, VJarm指令始终与单词对齐。拇指总是对齐的。thumb2是可变字长。你不能像分解固定字长一样分解可变字长。要反汇编可变字长指令集,您不能简单地遍历对齐地址上的内存并反汇编。在某种形式下,您必须在执行中遍历数据,以找到每条指令的起始地址,然后从该列表

我正在编写/(使用binutils)一段代码来手动分解thumb2(16位和32位)指令。 我面临着一个区分真正的ARM指令和数据部分的问题

最大的问题是指令没有对齐。 所以当我尝试读取32位指令时,很多时候它实际上与下一条指令重叠

请帮忙

谢谢,
VJ

arm指令始终与单词对齐。拇指总是对齐的。thumb2是可变字长。你不能像分解固定字长一样分解可变字长。要反汇编可变字长指令集,您不能简单地遍历对齐地址上的内存并反汇编。在某种形式下,您必须在执行中遍历数据,以找到每条指令的起始地址,然后从该列表中进行反汇编

如果您也能够读取符号表,GCC将留下符号$a$t$d,指示您应该在哪个地址切换如何解释字节:Arm、Thumb和Data

例如,这就是objdump知道如何显示文本池的内容,但不尝试将它们映射回指令,尽管a.text部分中的相邻函数之间存在