【发布时间】:2011-05-08 05:31:37
【问题描述】:
我似乎无法在 NASM 的文档中找到关于在代码中使用 Section 或 [SECTION ](带括号)之间的区别的任何明确内容。我知道这些是宏,但我看到它们几乎可以互换使用。是这样吗?换句话说就是
[SECTION .text]
相当于
Section .text
?
括号是否暗示了一些神秘的副作用?
谢谢
【问题讨论】:
我似乎无法在 NASM 的文档中找到关于在代码中使用 Section 或 [SECTION ](带括号)之间的区别的任何明确内容。我知道这些是宏,但我看到它们几乎可以互换使用。是这样吗?换句话说就是
[SECTION .text]
相当于
Section .text
?
括号是否暗示了一些神秘的副作用?
谢谢
【问题讨论】:
[SECTION .xyz] 是 section 指令的原始形式,它只是设置当前输出部分,SECTION .xyz 略有不同,因为它像宏一样工作:
SECTION .text
扩展到两行
%define __SECT__ [SECTION .text]
[SECTION .text]
它可以与宏结合使用来临时切换输出部分,并将其切换回其原始值。示例from the NASM manual:
%macro writefile 2+
[section .data]
%%str: db %2
%%endstr:
__SECT__
mov dx,%%str
mov cx,%%endstr-%%str
mov bx,%1
mov ah,0x40
int 0x21
%endmacro
当你使用这个宏时,输出部分被SECTION的原始形式临时设置为.data,并用__?SECT?__设置回原来的值
【讨论】: