有没有办法像这样在汇编代码的.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 文档。
关于linux - 在 nasm 程序集中的 .data 段之外声明字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8526879/