如何解决在组装中定义调试宏使用gas?
对于在调试器之外进行调试,我经常会添加基本的打印语句,例如:
str: .string "Hello!\n"
mov $1,%rdi
mov $str,%rsi
mov $7,%rdx
mov $1,%eax
syscall
有没有一种方法可以创建一个宏,而我可以这样写:
print ($str,$7)
它会自动扩展为:
mov $1,%rdi
mov $1,%eax
mov $str,%rsi
mov $7,%rdx
syscall
我看过macro
文档中的gas,但似乎使用的语法不确定,在哪里定义(似乎他们在使用for循环?)。可以在asm中进行上述操作吗?我想如果没有的话,我可以在vim中创建一个片段,将其“扩展”到上面。
谢谢你的建议。我用来打印以上内容的经过测试的宏是:
.macro DEBUG str_addr,str_len
mov $1,%edi
mov $\str_addr,%rsi
mov $\str_len,%edx
mov $1,%eax
syscall
.endm
DEBUG str,7
虽然语法有点奇怪,但对于“普通指令”(例如,不是循环或有条件的),宏语法称为:
macro arg1,arg2
并定义为:
.macro <macro_name> <arg1>,<arg2>,...
.endm
变量名称需要使用\
进行转义。因此,例如要引用arg1
,您必须做\arg1
。
解决方法
好的。您应该可以执行这样的操作(我没有加油装置,因此未经测试):
.macro myprint s,len
mov $1,%rdi
mov $\s,%rsi
mov $\len,%rdx
mov $1,%eax
syscall
.endm
然后您将这样称呼它:
myprint str,7
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。