Lập Trình ASM,cách
tạo biến cục bộ
Code:
.386
.model
flat,stdcall option casemap:none include
\masm32\include\windows.inc include
\masm32\include\kernel32.inc includelib
\masm32\lib\kernel32.lib include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib
.data
MsgBoxCaption
db "Iczelion Tutorial No.2",0 MsgBoxText db "Win32
Assembly is Great!",0 .code
start: invoke MessageBox, NULL, addr
MsgBoxText, addr MsgBoxCaption, MB_OK invoke ExitProcess, NULL
end start đây là dòng biến của chương trình.data MsgBoxCaption db "Iczelion Tutorial No.2",0 MsgBoxText db "Win32 Assembly is Great!",0 cho mình hỏi là đây có phải là biến cục bộ của hàm main hay không,hay là biến toàn cục của toàn chương trình vậy |
Đó là biến toàn cục
của chương trình. Biến cục bộ được lưu trong
stack.
|
Quote:
rất cảm ơn bạn đã
trả lời,bạn cho mình hỏi thêm là làm thế nào để mình có thể làm cho 2 biến đó là
2 biến cục bộ vậy,bạn có thể ghi code ra được không
:D
|
Dùng từ khóa LOCAL khai báo trước biến. Biến này chỉ có tác dụng trong bản thân một thủ tục xử lý mà thôi.
Code:
WndProc
proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC LOCAL
ps:PAINTSTRUCT LOCAL
rect:RECT .IF uMsg==WM_DESTROY
invoke PostQuitMessage,NULL .ELSEIF
uMsg==WM_PAINT invoke BeginPaint,hWnd, ADDR
ps mov hdc,eax
invoke GetClientRect,hWnd, ADDR rect invoke
DrawText, hdc,ADDR OurText,-1, ADDR rect, DT_SINGLELINE or DT_CENTER or
DT_VCENTER invoke EndPaint,hWnd, ADDR
ps .ELSE invoke
DefWindowProc,hWnd,uMsg,wParam,lParam
ret .ENDIF xor
eax,eax ret WndProc
endp
Best
Regards!
|
Quote:
Một cách khác nữa để
dùng biến cục bộ :
Code:
push ebp mov
ebp,esp // Bây giờ dùng biến cục bộ. Các biến này có dạng [ebp +
4 * n] pop ebp ret |
TASM:
Code:
test_proc
proc c
; parameters arg
arg1:DWORD arg arg2:DWORD
arg arg3:DWORD arg arg4:DWORD
local local1:DWORD local
local2:DWORD pusha
nop nop popa
ret test_proc endp |
Quote:
Cái này thiếu sub
esp, XXX
Nếu không làm như vậy các biến cục bộ sẽ bị ghi đè lên khi có các lệnh làm thay đổi stack. Với lại cách của Mèo là cách khi trình biên dịch dịch cái của Thug ra. |
Quote:
Ờ nhỉ, mình quên
mất :D
|