|
(1). PUSH cContinuable
(2). PUSH cNonDelphiException
(3). CALL RaiseException
(4).________ADD ESP,8____________________________
여기세어 ADD ESP, 8이라 함은
이 부분을 보면 RaiseException이라는 BuilderSystem function을 호출하면서
push했던 parameter(cContinuable, cNonDelphiException)을 pop해 주는 것입니다.
"(1) 수행전의 ESP의 값 = (4)수행전의 ESP값 + 8"
가 성립하는지 일단 확인해 보시구요,
아무래도 제 예상에는 프로그램에서 뭔가 잘못된 코드가 있을 것으로 판단됩니다.
유영인 [Chris] 님이 쓰신 글 :
: 아래의 어셈블 코드는 에러가 났다는 신호를 보여주는 신호밖에 되지 않습니다. 따라서 저 신호를 보고선, 어떤 에러인지를 알 수가 없죠.
:
: 대부분의 후킹이나 메모리를 동적으로 잡았던 프로그램들이, 메모리 해제를 안하거나, 해제 순서를 어겨 NULL 인곳을 참고하는 경우가 많습니다. 프로그램을 끌 때, ALT + F4 키를 눌러 프로그램을 한번 종료시켜 보세요. ALT + F4 키를 눌러 종료시키는 경우, 내부적인 이벤트 실행이 중단되지만, 일반적인 X 버튼을 눌러 종료시키는 경우에는 이벤트 실행이 정상적으로 이루어 집니다. 따라서, 에러가 나지 않는다면 메모리 해제 순서가 틀렸을 경우에 더더욱 가까워지죠.
:
:
: skan 님이 쓰신 글 :
: : { tell the debugger about the raise of a non-Delphi exception }
: : procedure NotifyNonDelphiException;
: : asm
: : CMP BYTE PTR DebugHook,0
: : JE @@1
: : PUSH EAX
: : PUSH EAX
: : PUSH EDX
: : PUSH ESP
: : PUSH 2
: : PUSH cContinuable
: : PUSH cNonDelphiException
: : CALL RaiseException
: : ________ADD ESP,8____________________________ << 이부분에서 에러가 나네요..
: : POP EAX
: : @@1:
: : end;
: :
: : 꼭 저부분에서 나는데...
: :
: : 제 소스상에 있는 코드는 당연히 아니구요..
: :
: : 무슨 에러 때문에 그럴까요..
: :
: : 프로그램은 잘 돌아간답니다.
: :
: : 근데 이상하게 프로그램을 종료하면 저창이 꼭 뜨네요..
: :
: : 불안해서.. ㅡ.ㅡ;;;
: :
: : 부탁 좀 드리겠습니다.
: :
: : 그냥 어떤 에러일 것이다라고만이라두용..
: :
: : 그럼 ^^;; 수고하세요~~
|