2011-12-15 1 views
1

Есть ли способ определить указатель строки в части кода сборки .text следующим образом?Объявление строк в сегменте .data в сборке nasm

SECTION .text   

     global main    


main:       
     fmt: dd  "%s", 10, 0 

или, возможно, есть строка построена и имеет регистр, указывающий на него, поставить все это можно сделать в разделе .text?

+0

Да. Вероятно, вы также можете использовать раздел '.rodata' для данных только для чтения. –

+0

как бы вы это сделали? – meltuhamy

ответ

1

Монтажники довольно глупые, и вы должны написать все, что в явном виде, как это:

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.

+0

Это потрясающе, спасибо за помощь; Я отдам это. – meltuhamy

Смежные вопросы