反汇编文件

2024-06-11 16:18
文章标签 反汇编

本文主要是介绍反汇编文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ARM反汇编机器码:32 bit,反汇编出来是用十六进制表示的。


[31:28]条件码

[27:24]为1010是表示b指令,1011是表示bl指令

[23:0]是偏移地址。2^24=32M bit,这就是b和bl的跳转只有32M的原因。

b和bl指令偏移地址的计算:首先将这24位带符号位的补码扩展成32位,注意这里的扩展是左边添加位“1”,当然得到的数也要把最高位当做符号位。再将得到的数左移两位,转换成十进制数(负数)就是偏移地址,也叫地址偏移量。最后将得到的值加到pc寄存器中(pc值是当前指令的地址加8)就得到跳转位置的地址,也就是绝对地址。这种跳转指令(位置无关码)是依赖当前pc寄存器的值,相当于以pc值为参考点来实现跳转。因此他不需要知道我的代码存储的位置。用程序代码解释就是:

if conditionPassed(cond)
{if(L==1)lr = address of the next instruction;pc = pc + (SignExtend(Signed_offset_24)<<2)
}

相比于b的跳转,还有一个ldr跳转指令。

ldr指令是从内存中的某处读出地址数据赋给pc实现跳转。例如ldr pc,[pc,#0],要访问的这个数据的地址是当前的pc加上0。实际中具体要加多少偏移值要根据编译时的连接地址(用-Ttest选项设置或者是用连接脚本)


绝对地址:与代码执行时存放的位置有关

相对地址:可想而知





这篇关于反汇编文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1051662

相关文章

1 IDA反汇编 今天只看看 别人是怎么防护的 软件安全

先看32位还是64位 能用32位的打开就是32位,否则会报错。API Monitor不改软件,只是看。 IDA加载 用的openssl加解密 定位:找到需要修改的地方 一般有提示句等 先看看自己写的:shift+F12 展示所有的字符串; 修改 或叫打补丁 比如在需要判断的地方JNZ改值 或NOP 应用 补丁到改后的软件 运行新软件 IDA使用技巧shift+

IDA反调试、反汇编解决方案

IDA全称为Interactive Disassembler Professional,是一款交互式静态反汇编工具,它可以直接反汇编出二进制文件的汇编代码,是逆向分析领域最强大的工具之一。 IDA支持Windows、Linux等多平台与数十种指令集,凭借着泛用性与友好的图形化界面,被广泛应用于逆向分析。但也因此被游戏黑灰产所利用,不少外挂作者会使用IDA来分析游戏代码逻辑,寻找关键函数进行hoo

c++引用的本质(反汇编角度分析)

目录  一、引用基础理论 二、 引用的本质 三、从反汇编角度进行分析  1.变量赋值 2.引用和指针初始化 3.通过引用和指针赋值 4.eaxd的作用  一、引用基础理论         在c++中我们都知道,引用(&)就是变量的一个别名,它允许我们为已存在的变量创建一个新的名字。         引用的作用:引用和它所引用的变量共享同一块内存地址。当对引用进行修改时,

Visual Studio 调试反汇编c++/c

目录 一、代码打断点 二、开启调试 三、调试反汇编 一、代码打断点 如下图所示:  二、开启调试   三、调试反汇编         代码调试成功后,打开窗口下的反汇编就可以查看我们的反汇编代码了。

通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的

刘子健  原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 对一下代码进行反汇编分析: int g(int x){return x + 42;}int f(int x){return g(x);}int main(void){return f(42) +

反汇编u-boot.bin

# arm-linux-objdump -S u-boot > u-boot.S #  arm-linux-objdump -S u-boot.elf > u-boot.S

C++指针和动态内存分配细节,反汇编,面试题05

文章目录 20. 指针 vs 引用21. new vs malloc 20. 指针 vs 引用 指针是实体,占用内存空间,逻辑上独立;引用是别名,与变量共享内存空间,逻辑上不独立。指针定义时可以不初始化;引用定义时必须初始化。指针的值可以变,即可以指向别的内存地址;引用不变的。指针可以为nullptr;引用不能为空。sizeof(指针)计算指针大小,由于指针保存的是内存地址,所以

C++反汇编,指针和内存分配细节,面试题05

文章目录 20. 指针 vs 引用21. new vs malloc 20. 指针 vs 引用 指针是实体,占用内存空间,逻辑上独立;引用是别名,与变量共享内存空间,逻辑上不独立。指针定义时可以不初始化;引用定义时必须初始化。指针的值可以变,即可以指向别的内存地址;引用不变的。指针可以为nullptr;引用不能为空。sizeof(指针)计算指针大小,由于指针保存的是内存地址,所以

【CTF Reverse】XCTF GFSJ0492 insanity Writeup(反汇编+字符串搜索)

insanity 菜鸡觉得前面的题目太难了,来个简单的缓一下 解法 拖进 Exeinfo PE 中分析。 -> Compiler : GCC: (Debian 4.4.7-2) 4.4.7 用 IDA 打开。 按 shift + F12 打开 String 页面。找到 flag。 Flag 9447{This_is_a_flag} 声明 本博客上发布的

【CTF Reverse】CTFShow 逆向签到题 Writeup(反汇编)

逆向签到题 1 逆向题的hello world 解法 导入 DIE 分析。是一个 ELF64 程序。 导入 IDA,找到 flag。 Flag flag{7ujm8ikhy6} 声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。 博主坚决反对任何形式的非法黑客