[MASM] Stack Parameter 에 대한 질문입니다...

등짝을보자의 이미지

TITLE StackParameter.asm
 
INCLUDE Irvine32.inc
 
.data
array BYTE 'ABCDEFGHI',0
 
.code
;INVOKE DumpMem,OFFSET array,LENGTHOF array,TYPE array
main PROC
	push OFFSET array
	push LENGTHOF array
	push TYPE array
	call DumpMem
	call DumpRegs
	exit
main ENDP
END main

일단 컴파일은 됩니다..
하지만 실행하면...

Dump of offset 01C754B8
-------------------------------

이런 말 뜨고 안된다며 경고창 뜹니다..

책에 적혀있기로는 된다고 적혀있는데 왜 안되는건가요??

mov esi,OFFSET array 이 부분을 Stack Parameter 에서 처리을 못해서 그런거같은데요..
어떻게하면 되나요??

밑에 소스는 Register Parameter 을 이용한겁니다
이건 잘되요...하지만
Stack Parameter 는 안되네요...

TITLE register_parameter.asm
 
INCLUDE Irvine32.inc
 
.data
array BYTE 'ABCDEFGHI',0
 
.code
main PROC
	pushad
	mov  esi,OFFSET array
	mov  ecx,LENGTHOF array
	mov  ebx,TYPE array
	call DumpMem
	popad
	exit
main ENDP
END main

Dump of offset 00404000
-------------------------------
41 42 43 44 45 46 47 48 49 00
flyingykk의 이미지

DumpMem이 Irvine32.inc 파일에 들어있나요? 각각 다른 DumpMem이 StackParameter.asm과 register_parameter.asm에 사용되어야 할 것 같은데.

전자는 파라미터를 스택에서 얻고, 후자는 레지스터에서 얻으니 사용되는 코드가 달라야 하지 않을까요?

StackParameter.asm에 쓰이는 DumpMem에서는 pop ebx, pop ecx, pop esi로 파라미터를 얻어야 할 것 같습니다. (순서가 중요합니다. 스택이니까 제일 나중에 들어간 게 제일 먼저 나옵니다.)

등짝을보자의 이미지

아..맞아요....
pop 을 생각을 못했네요..


감비노도 궁금해하더라구..등짝!..등짝을보자!..


감비노도 궁금해하더라구..등짝!..등짝을보자!..