2011-12-15 24 views
1

有沒有像這樣在彙編代碼的.text部分定義字符串指針的方法?向nasm程序集中的.data段外部聲明字符串

SECTION .text   

     global main    


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

或許已經串結構,並有指向它的寄存器,把所有的這種情況可能在.text部分做些什麼呢?

+0

是的。你可能也可以使用`.rodata`節來讀取只讀數據。 – 2011-12-15 21:37:07

+0

你會怎麼做? – meltuhamy 2011-12-15 22:33:10

回答

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文檔。