assembly - arm64 程序集:向前分支 n 个字节
问题描述
嘿,所以我试图进入 64 位 arm 中的较低级别系统编程,并且我试图向前分支 64 个字节,特别是跳过Image header。我注意到在 arm64 下,PC 不再是可访问的寄存器。我如何相对于 arm64 程序集中的当前位置向前分支 64 个字节?我需要它来适应两个或更少的指令(code0 和 code1)。谢谢
解决方案
像这样的东西(给或取一个字/字节来微调它)
b hello
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
hello:
Disassembly of section .text:
0000000000000000 <hello-0x84>:
0: 14000021 b 84 <hello>
...
然后导致
b hello
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
.word 0,0,0,0,0,0,0,0
hello:
.inst 0x14000021
Disassembly of section .text:
0000000000000000 <hello-0x84>:
0: 14000021 b 84 <hello>
...
0000000000000084 <hello>:
84: 14000021 b 108 <hello+0x84>
好吧,所以我不能正确数到 64...但是您明白了,我想我的意思是使用 .byte 而不是 .word ...
您可以使用标签,或者如果您想要一个固定的偏移量,请使用机器代码。
一些汇编器(汇编是由汇编器而不是目标定义的)可能支持这样的东西:
hello:
b .+64
Disassembly of section .text:
0000000000000000 <hello>:
0: 14000010 b 40 <hello+0x40>
但我希望它是非常特定于汇编程序(汇编语言)的,而不是跨 aarch64 汇编程序的移植。( .word 0x14000010 的一些味道会移植)
推荐阅读
- r - 创建一个新的日期变量,它与 r 中的原始日期变量在一周中的同一天、同一月和同一年
- c# - MVC / HTML.DropDownListFor / 制作默认选项及其值
- c++ - Embarcadero C++ Builder 可能的 log() 函数错误?
- azure - 通过请求 Azure Active Directory oAuth2-Token-Endpoint 接收“AADSTS500031:找不到签名证书”错误
- excel - 我们如何在两列中找到匹配的文本并找到数字的差异?
- c++ - 如何为非类型模板参数类型考虑 ADL
- lua - 在 LUA 上的 MouseMoveRelative 上的 Sleep() 函数有问题
- android - 我已经从 GitHub 下载了电报开源代码
- microsoft-graph-api - 在 OneDrive 中创建带有大写扩展名的 Excel 文件会使其处于奇怪的只读模式
- regex - 正则表达式捕获第三个括号中的字符串