처음엔 잘따라 했는데 갑작이 팍 어려워지네요 컴 전공 해야 알아 들을수 있는건가
좀 쉽게 여기 아래부분 좀 쉽게 풀이 해주실분 안계신가요? 초등학생이 원의 넓이 구하고 있는데 갑작이 공간도형 문제가 튀어 나오는 기분
00434AA2 코드에서 [ESI]와 AL(1바이트)을 비교하려고 하고 있군요.
ESI에는 우리가 방금 전 찾았던 텍스트 주소, 01B73723이 들어있습니다.
BYTE PTR DS:[ESI] 라고 하면 01B73723 번지의 1바이트 값을 뜻하므로, 여기서는 ‘8E’가 됩니다.
또, 바로 윗줄에서 XOR EAX, EAX를 했으니 EAX는 0이 됩니다.
즉, 간단하게 말하면 첫 번째 문자가 00인가 검사하려는 찰나였습니다.
데이터를 바이트 단위로 검사하고…
첫 바이트가 00이면 함수 끝자락으로 점프한다…
냄새가 납니다. 그렇죠? 냄새…
그렇다면 ESI는 어디서 세팅되는 걸까요?
434A90을 이 함수의 시작점이라 볼 때
PUSH ECX
PUSH EBX
PUSH ESI
사실 요 세 녀석들 때문에 ESP가 12만큼 감소되었습니다.
(스택 포인터는 자료를 넣을수록 그 값이 감소합니다.)
함수 시작점에서는 [ESP+4] 로 얻어올 수 있는 인자였지만, 저 세 번의 푸쉬로 인해 [ESP + 10] 위치가 되었습니다.
강좌게시글에도 이런 친절함은 없었는데 ^^;;