hey, guys, any idea how to define a label prefix+var inside a masm32 macro? i mean sth like prefix bla_VAR? ::)
include \masm32\include\masm32rt.inc
MakeBla MACRO arg, value
@CatStr(<bla>, <arg>, < dd >, %value)
ENDM
.data
MakeBla Abc, 123
.code
start: MsgBox 0, str$(blaAbc), "Hello World", MB_OK
exit
end start
Just a help to write macro,allow to display partial result:
Quote
DISPLAY MACRO chaine ;add a % to arg (%arg) if necessary
%ECHO chaine
ENDM
another syntax for CATSTR
Quote
chain CATSTR <bla_>,<.>,<otherthing>,%indice
it's gotta get like bla MACRO prefix_index and
jmp @another_prefix! :D
Too much bla in your posts. Invest some time to explain what exactly you want to achieve, with a complete hello world example, and I may be willing to help you.
@TRY_BEGIN MACRO Handler
ASSUME FS:NOTHING
pushad ; Save Current State
;mov esi, offset Handler ; Address of New Exception Handler
lea esi, [ebp+offset Handler]
push esi ; Save Old Exception Handler
push dword ptr fs:[0] ; Install New Handler
mov dword ptr fs:[0], esp
ENDM
@TRY_EXCEPT MACRO Handler
jmp NoException_Handler ; No Exception Occured, so jump over
Handler:
mov esp, [esp + 8] ; Exception Occured, Get old ESP
pop dword ptr fs:[0] ; Restore Old Exception Handler
add esp, 4 ; ESP value before SEH was set
popad ; Restore Old State
ENDM
@TRY_END MACRO Handler
jmp ExceptionHandled_Handler ; Exception was handled by @TRY_EXCEPT
NoException_Handler: ; No Exception Occured
pop dword ptr fs:[0] ; Restore Old Exception Handler
add esp, 32 + 4 ; ESP value before SEH was set. 32 for pushad and ...
ExceptionHandled_Handler: ; ...4 for push offset Handler. (No Restore State)
ENDM ; Exception has been handled, or no exception occured
basically i just wanna make these nicely nestable... i.e. NoException_Handler: should be like NoException_PARAM. i hope i've explained it nicely 8)
PS: i just need to somehow make the labels uniquely generated... so i could nest the handlers... ;)
This one,working well,give an answer
Hello,
here an simple example for nesting:
@exh_nesting TEXTEQU <0>
@TRY_BEGIN MACRO
LOCAL lbl,lbl2
@exh_nesting TEXTEQU %@exh_nesting + 1
% @exh_lbl_&@exh_nesting& TEXTEQU <lbl>
% @exh_ne_lbl_&@exh_nesting& TEXTEQU <lbl2>
ASSUME FS:NOTHING
pushad ; Save Current State
push lbl ; pNext
push dword ptr fs:[0] ; Install New Handler
mov dword ptr fs:[0], esp
ENDM
@TRY_EXCEPT MACRO
LOCAL lbl
% jmp @exh_ne_lbl_&@exh_nesting& ; No Exception Occured, so jump over
% @exh_lbl_&@exh_nesting&:
; unwinde code: ignore the failing code
mov eax,[esp+12]
mov [eax].CONTEXT.regEip,lbl
xor eax,eax
db 0c3h ; RET 0; to avoid problems with PROC's epilogue
lbl:
pop dword ptr fs:[0] ; Restore Old Exception Handler
add esp,4
popad ; Restore Old State
ENDM
@TRY_END MACRO Handler
LOCAL lbl
jmp lbl ; Exception was handled by @TRY_EXCEPT
% @exh_ne_lbl_&@exh_nesting&: ; No Exception Occured
pop dword ptr fs:[0] ; Restore Old Exception Handler
add esp, 32 + 4 ; ESP value before SEH was set. 32 for pushad and ...
lbl: ; ...4 for push offset Handler. (No Restore State)
@exh_nesting TEXTEQU %@exh_nesting - 1
ENDM ; Exception has been handled, or no exception occured
test:
@TRY_BEGIN
print "0",13,10
@TRY_BEGIN
print "n1",13,10
xor ecx,ecx
div ecx
@TRY_EXCEPT
print "nexp",13,10
@TRY_END
xor eax,eax
mov eax,[eax]
@TRY_EXCEPT
print "1",13,10
@TRY_END
thank u, guys, that would really help! :t it's perfect... :eusa_dance: