본문 바로가기

쓰기



... 차이점이 느껴지십니까? ;; (요즘 이 문구 너무 자주 써먹는다)

SOW 의 포인터 돌려주기 루틴을 조금 개선했습니다. 앞으로는 가장 먼저 나오는 주소를 변경합니다.

예를 들면..
[ESI+0x4FA78]+[ESI+0x4FA7C] 의 경우 [ESI+0x4FA78] 의 포인터를 보정합니다.
ECX+0x3 의 경우 ECX 의 포인터를 보정합니다.

따라서.. ATCode의 주소식에서 가능하면 기준 포인터는 뒤에, 변환 포인터를 앞에 두시기 바랍니다.
다시 말해 [ESI+0x4FA78]+[ESI+0x4FA7C] 의 경우, [ESI+0x4FA7C] 가 기준 포인터이고 (곧, 문자 출력할 때 변하지 않는 포인터), [ESI+0x4FA78]이 변환 포인터 (곧, 문자 출력시 1씩 더해가면서 출력되는 포인터)입니다. 물론 거꾸로 놓아도 동작하긴 합니다만.. 기준 포인터는 메모리 복구 이전에 다른 데에서 쓰여버리면 곤란하기 때문에 가능하면 변환 포인터를 사용해 보졍하는 것이 안전할 듯 생각됩니다.

.. 괴악하게 0x3+ECX 라고 사용하지는 마시기 바랍니다 -_-; 반드시 포인터 레지스터 혹은 변수가 맨 앞에 있지 않으면 역시 보정 못합니다.

whoami

2008.07.23
18:31:03
정리해서 안정화 된건 D&F로 올려야지요.. 사용자 프렌들리한 옵션창도 붙여서...

옵션창...

rabbit%20(1).gif... ㄷㄷㄷ

whoami

2008.07.23
18:38:18
계산하고 돌려주는건 아니고.. 어차피 내부에서 알아서 계산될테니 레지스터 내의 주소만 원문과 번역문 만큼의 차이만큼 이동시켜줘 버리면 되지 않나 (원래는 백업 포인트를 먼저 계산해서 그냥 레지스터 내에 넣어버리는 식이었습니다) 싶어서 바꿔봤습니다. 절대값과 상대값의 차이라고나 할까요.

사용자 프렌들리...
rabbit%20(20).gif
List of Articles
공지 Talk [필독] 테스트필터 사용시 주의사항
라파에
155445   2008-08-03 2008-12-16 00:03