2015-06-13 75 views
4

我正在学习ASM,我遇到了一个小问题。 我无法在“section.data”中“声明”多个字符串。 我想是这样的:OSX 64位上的NASM问题

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 

这个功能应该打印在标准输出“测试1测试2”,但它不工作。 结果是:

test2 

它仅适用于存储在最后一个字符串!如果有人知道为什么,请告诉我!

+2

让我猜... Nasm-2.11.08?它具有'-f macho64'的错误。回到2.11.06。 2.11.09应该很快就会解决,如果一切顺利的话。这些事情发生... :( –

+0

该死的,谢谢你... –

+0

@FrankKotler - 这是神秘的知识。(扩大?)的答案可能有助于其他人。 –

回答

2

如果您使用的是nasm 2.11.08,则有一个问题记录here与数据部分中的多个条目组合的相对寻址有关。

您可以确定两件事情中的一件(或两件)。

首先,你可以看看生成的汇编代码来调查实际上是。这可能是最终的选择,因为您可以确切地看到CPU将运行的是什么。其次,你可以用之前的版本nasm来测试你的代码,看看问题是否消失。如果是这样,那就是间接证据,它是2.11.08中的错误导致你的问题。