이글은 치트엔진코리아의 시티님이 작성하신 글이므로 펌입니다.
--------------------------------------------------
### [enable], [disable], alloc, dealloc, registersymbol, unregistersymbol ###
요넘들은 어셈명령어가 아니라 치엔만이 사용하고 이해하는 일종의 약속어
[enable] - 틱을 할때 그 아래 코드를 번역
[disable] - 틱을 지울때 그 아래 코드를 번역 (일종의 청소 작업)
alloc( x, y ) - y 크기의 메모리를 x 라는 이름으로 예약
코드가 위치할 메모리 공간을 미리 마련하는 작업
y 크기는 코드가 들어갈만큼 적당하게 잡는게 좋음
dealloc( x ) - 예약된 x 를 취소
registersymbol( x ) - x 라는 이름을 붙임 (등록)
등록된 이름은 치트테이블에서 메모리 주소 대신 사용
unregistersymbol( x ) - x 라는 이름을 떼버림 (강퇴 ㅋ)
예로, 치트테이블용 Code Caving 코드 기본 골격을 살펴보면;
[enable] <--- 틱을 할때 그 아래 코드를 번역
alloc(CODECAVE, 64) <--- 64 바이트 크기의 메모리를 CODECAVE 라는 이름으로 예약
registersymbol(COOL, 4) <--- 4 바이트 크기의 메모리에 COOL 이라는 이름을 붙임 (등록)
CODECAVE: <--- CODECAVE 라는 예약된 이름의 시작부분 표시
... 반드시 이름뒤에 콜론( : ) 을 사용
... 코드 크기가 64 바이트 안에 들어갈 수 있어야 함
...
[disable] <--- 틱을 지울때 그 아래 코드를 번역
unregistersymbol(COOL) <--- COOL 이라는 이름을 떼버림
dealloc(CODECAVE) <--- CODECAVE 를 취소
위 코드를 치트테이블에 등록했다고 가정하고 틱을 하면
치엔은 [enable] 아래 있는 코드를 번역함
이제 CODECAVE 와 COOL 이라는 이름들은 등록이 되었기 때문에
치트테이블에서 인지되어 16진수 주소 대신에 사용이 가능함.
즉, Add address manuallly 버튼을 누른후 주소를 적는 칸에 16진수 대신
CODECAVE, COOL 이라고 적을 수 있음
왜 이렇게 복잡하게 할까?
그건 치트테이블에 등록된 코드를 틱할때마다 번역되어 위치하는
메모리 장소가 달라지기 때문
하지만 메모리 주소 대신에 이름으로 치트테이블에 저장해 놓았기 때문에
주소가 달라져도 치엔이 알아서 이름보고 주소를 파악해내므로 걱정 끝!
또, 이름이니까 이해하기도 편함
----------------------------------------------------------------
alloc(이름, 크기) : 빈공간생성
registersymbol(빈공간이름) : 빈공간에 이름붙이기 (이걸 쓰면 주소추가할때나 그럴때 주소대신 이름써도됨)
label(이름) : 스위치
[enable] : 체크 됬을시 실행될 코드
[disable] : 체크가 풀렸을씨 실행될 코드
dealloc(빈공간이름) : 빈공간 제거
unregistersymbol(빈공간이름) : 빈공간이름표 제거
정리하자면 이정도?..
시티님의 허락을 맡고 싶었지만..
시티님이 가정생활로 인해 2년전에 잠수..