Linux 在nasm程序集中的.data段外部声明字符串
有没有办法在汇编代码的Linux 在nasm程序集中的.data段外部声明字符串,linux,gcc,assembly,intel,nasm,Linux,Gcc,Assembly,Intel,Nasm,有没有办法在汇编代码的.text部分定义如下的字符串指针 SECTION .text global main main: fmt: dd "%s", 10, 0 或者构造字符串并用寄存器指向它,将所有这些都放在.text部分 汇编程序非常愚蠢,您必须明确地编写所有内容,如下所示: SECTION .text
.text
部分定义如下的字符串指针
SECTION .text
global main
main:
fmt: dd "%s", 10, 0
或者构造字符串并用寄存器指向它,将所有这些都放在
.text
部分 汇编程序非常愚蠢,您必须明确地编写所有内容,如下所示:
SECTION .text
global main
main:
; Some code here, you don't want to execute data.
mov ebx, fmt ; ebx points to fmt[0] ('%')
mov eax, dword [pfmt] ; eax also points to fmt[0] ('%')
; Some more code here.
pfmt dd fmt ; pfmt is a constant pointer to fmt[0] ('%')
fmt db "%s", 10, 0 ; fmt is a constant string
您可以使用宏简化编码:
%macro LoadRegWithStrAddr 2+
jmp %%endstr
%%str: db %2
%%endstr:
mov %1, %%str
%endmacro
SECTION .text
global main
main:
LoadRegWithStrAddr ebx, "%s", 10, 0 ; ebx points to "%s\n"
LoadRegWithStrAddr ebx,“%s”,10,0
扩展为:
jmp %%endstr
%%str: db "%s", 10, 0
%%endstr:
mov ebx, %%str
请参阅NASM文档。汇编程序非常愚蠢,您必须明确地编写所有内容,如下所示:
SECTION .text
global main
main:
; Some code here, you don't want to execute data.
mov ebx, fmt ; ebx points to fmt[0] ('%')
mov eax, dword [pfmt] ; eax also points to fmt[0] ('%')
; Some more code here.
pfmt dd fmt ; pfmt is a constant pointer to fmt[0] ('%')
fmt db "%s", 10, 0 ; fmt is a constant string
您可以使用宏简化编码:
%macro LoadRegWithStrAddr 2+
jmp %%endstr
%%str: db %2
%%endstr:
mov %1, %%str
%endmacro
SECTION .text
global main
main:
LoadRegWithStrAddr ebx, "%s", 10, 0 ; ebx points to "%s\n"
LoadRegWithStrAddr ebx,“%s”,10,0
扩展为:
jmp %%endstr
%%str: db "%s", 10, 0
%%endstr:
mov ebx, %%str
请参阅NASM文档。是。您可能还可以使用
.rodata
部分来获取只读数据。是的。您可能还可以使用.rodata
部分来获取只读数据。