我正在学习ASM,我遇到了一个小问题。 我不能在“section.data”中“声明”多个字符串。 我正在尝试这样的事情:
section .data
string1 db "test1 ", 0;
string2 db "test2 ", 0;
section .text
global _test
extern _puts
_test:
lea rdi, [rel string1]
call _puts
lea rdi, [rel string2]
call _puts
ret
此函数应该在STDOUT上打印“test1 test2”,但它不起作用。 结果是:
test2
它仅适用于存储的最后一个字符串!如果有人知道原因,请告诉我!
答案 0 :(得分:2)
如果你正在使用nasm
2.11.08,则会有一个问题记录为here与数据部分中的多个条目相关的相对寻址。
你可以做两件事中的一件(或两件)。
首先,您可以查看生成的汇编程序代码,以调查其实际生成的内容。这可能是确定的选项,因为您可以确切地看到CPU将运行的内容。
其次,您可以使用早期版本nasm
来测试您的代码,看看问题是否消失。如果是这样,间接证明它是2.11.08中导致您的问题的错误。