2016-07-11 5 views
2


내 사용자 지정 어셈블리 기능 안에 같은
의사 코드가 될 것이 창 함수를 호출하려고 :
Assembly- 호출 기능은

MYFUNC 
PUSH EBP 
PUSH WINDOWSFUNCTIONPARAMETER 
CALL [IMPORTEDWINDOWSFUNCTION] 
POP EBP 
RET 

그래서 내가 아는 그것이 떠날 안전 이렇게하면 내부에 하나의 함수 만 호출하면
어쨌든 스택이 복원되기 때문입니다.
문제가 있습니다. 왜이 후에 0x04를 추가 할 수 없습니까? - 내가 심지어이 있지만, IMO의 안전 기능 후에
통화를하려면 어떻게 든 내가 함수 내에서이 작업을 진행하지 못할
내가 어떤 도움을 gratefull 해요 :)을해야하는 경우 응용 프로그램은
임 확실하지 충돌

답변

0

"이것 이후"에 무슨 뜻인지 확실치 않습니다. 기본적으로 :

  • x86 아키텍처에서는 스택이 아래쪽으로 커집니다.
  • 호출 규칙에 따라 호출자 또는 호출 수신자가 스택을 정리합니다.

당신은 windows 함수를 호출합니다. 따라서 호출 된 함수가 스택 매개 변수를 정리한다고 가정합니다. 이것은 다음과 같은 결론으로 ​​이어진다 :

API 호출 후에 "add esp, 0x04"를 실행하면 "pop ebp"는 이전에 저장된 ebp 레지스터 대신 리턴 주소를 수신하게된다. 따라서 최종 "ret"는 실패하고 MYFUNC의 발신자에게 되돌아 가지 않습니다.

"add esp, 0x04"를 수행하여 함수 매개 변수를 제거하려는 경우 : Windows API가 이미이를 제거 했으므로 필요하지 않습니다.

편집 :

위의 하나가, I 등 그들은 무료이며 앱에있는 동안 당신에게 등 레지스터, 스택을 보여 올리 디버그, x64dbg, 같은 디버거를 사용하는 것이 좋습니다처럼 간단한 예제가있는 경우 실행 중입니다.