assembly - ARM64 汇编中的可变大小内存空间
问题描述
我目前有一个外部变量.extern length
,它在单独的 C 文件中定义。而下面的arm64汇编代码是固定大小的连续内存:
spaceBottom:
.space 0x1000
spaceTop:
有没有办法在 arm64 程序集中将此内存空间的大小设置为“长度”(而不是 0x1000)?
解决方案
正如评论者所指出的,您可以将其放在头文件中并使用它。
标头.h:
#ifndef HEADER_H
#define HEADER_H
#define MY_LENGTH 0x1000
#endif
来源.c:
#include "header.h"
const unsigned int length = MY_LENGTH;
asm.S:
#include "header.h"
.data
spaceBottom:
.space MY_LENGTH
spaceTop:
请注意,为了使其与 GNU 工具链一起使用,.S
后缀必须为大写。
一个不同的选择是将length
变量移动到程序集开始,然后你可以从spaceTop
和spaceBottom
符号构造它的值,如下所示:
.data
spaceBottom:
.space 0x1000
spaceTop:
.section .rodata
length:
.4byte spaceTop - spaceBottom
然后你只需要在头文件中声明来修复 C 端:
extern const unsigned int length;
推荐阅读
- python - Python从html页面中提取json结构
- javascript - 我们可以为移动视图实现带有触摸事件的 Drag n Drop 吗?
- javascript - 什么相当于打字稿中的java interface.class
- linux - 用于 linux 的“touch”更新文件时间戳的 Windows 等效命令
- python - 以管理员身份运行 python 脚本时创建的两个 tkinter 窗口实例
- c - 插座。设置 sockaddr_in 结构的 s_addr 字段
- jmeter - Jmeter-5.0:RPS(每秒请求数)和 TPS(每秒事务数)是否相同?
- laravel-5 - 如何使用包 bschmitt/laravel-amqp 在 RabbitMq Laravel 中使用消息
- terraform - GCP terraform 提供程序 - 可能的文档错误?
- c# - 文本框 textchange 事件以单击 datagridview 中的复选框