오랫만입니다 ;;
예전부터 해야지 해야지 미루다가 한동안 ATCTNR 과 알고리즘 플러그인이 업데이트 안되는 찬스를 노리고 후닥닥 해치웠습니다.
기능상의 변경점은 없고, 하위호환성 향상패치입니다.
* 변경점
- 피시님께서 변경하신 HookDllFunction, HookCodePoint 를 HookDllFunctionEx, HookCodePointEx 로 이름을 바꾸었습니다.
- HookDllFunctionEx, HookCodePointEx 에 들어가는 BOOL bHookSet 을 INT nHookType 으로 변경했습니다 (인자의 의미는 동일)
(혹 나중에 제3의 후킹방법이 발견될지 모르니까..랄까 결국은 BOOL이나 INT 나 int형이니까 똑같지만 그래도..)
- 기존의 인자를 가지는 HookDllFunction, HookCodePoint 를 API 에 다시 추가했습니다.
(어차피 내부적으로는 Ex 버전을 부릅니다만 이것으로 구버전 알고리즘 플러그인도 제대로 동작할겁니다)
그리고 부탁이랄까 가이드라인이랄까.. 앞으로 혹시라도 API 형식(인자, 리턴값)을 건드리실 일이 있다면 가능하면 하위호환성을
위해 기존 API 는 남겨두시고 이름을 새로 지어 추가해 주시기 바랍니다.
* 전부 고친다고 고쳤는데 각각의 알고리즘에 맞는 게임들이 현재 없다보니 만의하나 잘못된 플러그인이 올라갔을 수 있습니다.
바로 전버전에서 문제없었는데 이번 버전에서 에러가 나는 플러그인이 있으면 알려주세요.
(ATCode 는 일단 대충 동작확인을 했습니다)
ATCTNR_ATCode_Cached_DebuggingATCode_Kirikiri_NonCached.130616.zip
TwoComet
- 2013.06.17
- 00:37:17
TwoComet
- 2013.06.18
- 14:20:21
혹시 HookCodePointEx 의 4번째 인자를 int 형으로 하셨는데
기존 HookCodePoint 는 살아있는건가요? 살아있다면 인자는 뒤의 후킹 방식을 뺀 3개만 입력받도록 되있는지....?
아니라면 HookCodePoint (+DLL)도 따로해서 얘가 입력받는 인자는 3개만 받도록 지원해주시면 감사하겠습니다.
(훅타입을 제외)
구 SCP나 TAT코드 플러그인들이 4번째 인자가 없는 기존 HookCodePoint을 사용하도록 말이지요...ㅇ;;
(과거 플러그인들도 지원하기 위해서 위와 같은 형태로 다시 남겨두는게 좋다고 생각합니다만.. 어떨까요?)
whoami
- 2013.06.18
- 17:43:40
Ex의 4번째 인자는 이전 코드의 함수명에 Ex 를 붙이고 4번째 인자의 BOOL 을 INT 로 변경한 것밖에 없습니다.
들어오는 값도 예전에는 TRUE/FALSE (어차피 1/0) 였던 것을 ATHOOKTYPE_SOURCE/ATHOOKTYPE_COPY
(이게 맞나 모르겠네.. 지금 소스를 볼 수 없는 곳이라서.. 어쨌든 어차피 enum 으로 1/0) 로 변경한 것 뿐이지요..
아, 정의되지 않은 인자가 들어오는 경우 기본적으로 ATHOOKTYPE_COPY 로 동작한다는 것이 바뀐 점이랄까요.
BOOL을 INT 로 변경한 이유는 만약 제 3의 후킹타입이 발견? 발명? 되었을 때 유연히 대처하기 위한 것입니다.
물론 BOOL이나 INT 나 같은 int 형이지만 시그니쳐에 BOOL 이라고 써있으면 T/F 만 들어갈 수 있는 것처럼
보이니까요.. 기분상.. 이랄까;;; (먼산)
그리고 다시 살린 HookCodePoint 의 경우 옛날 버전처럼 인자를 3개 받아서 Ex에 보내주기만 합니다. 쉽게 말해
BOOL HookCodePoint(인자3개)
{
return HookCodePointEx(인자3개, ATHOOKTYPE_COPY);
}
인 것이죠. 내부적으로는 Ex 버전으로 동작하는겁니다. 하지만 이 API를 살려둠으로 해서 기존 SCP나 TAT 플러그인도
소스를 안 고치고 바이너리 레벨에서 호환되어 동작가능해지는 것이죠. 그래서 하위 호환성 패치라는 뜻이고요.
AralGoodDlg 는 AralTrans.exe 쪽 파일이네요. 그렇지 않아도 본체쪽 130601버전 커밋좀 해달라고 말씀드리려 했는데.. 기존 버전에서 AralGoodDlg 만 치환하면 130601 버전이 되는건가요? 아니면 다른 곳도 만져야 하나요? 어차피 exe 파일쪽은 손 안댔으니까 (아, bin 에 파일 올렸구나.. 이거는 그냥 자동 업데이트된것 올린것 뿐인데;;) AralTrans.exe 는 직접 커밋하셔도 되지 않을까나요?
그리고.. 여쭤본다는걸 깜박 잊은게 있는데.. ATCTNR 에 export 되어있는 것 중에 PreBinaryPatch 라는게 있던데 이거 어디에 쓰이는건가요? def 파일에 정식으로 올라있는게 아닌 것으로 봐서 내부적으로 쓰거나 테스트용도로 쓰인게 남은 것 같기도 한데..