1
有沒有像這樣在彙編代碼的.text
部分定義字符串指針的方法?向nasm程序集中的.data段外部聲明字符串
SECTION .text
global main
main:
fmt: dd "%s", 10, 0
或許已經串結構,並有指向它的寄存器,把所有的這種情況可能在.text
部分做些什麼呢?
有沒有像這樣在彙編代碼的.text
部分定義字符串指針的方法?向nasm程序集中的.data段外部聲明字符串
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文檔。
是的。你可能也可以使用`.rodata`節來讀取只讀數據。 – 2011-12-15 21:37:07
你會怎麼做? – meltuhamy 2011-12-15 22:33:10