본문 바로가기

쓰기

ATCode 테스트버전 120207 의 댓글이 너무 복잡하게 꼬여서 이쪽으로 뺍니다.

 

현재 120207 에서 SMSTR 은 기본적으로 피시님 버전의 OVERWRITE(IGNORE,BUFCHANGE) 모드로만

돌아가도록 만들어져 있습니다. 그런데 피시님께서 부가기능이 필요하시다고 하셨는데 제가 이해가

좀 어려워서 제가 제대로 이해했는지 확인할 필요가 있네요.

 

일단 용어정리부터.

- 기본버퍼: 스마트 문자열의 앞 16바이트

- 한 라인 이내: 16 바이트 이내. 곧 유니코드 7글자 + 0x0000 혹은 ANSI 15글자 + 0x00.

- 덮어쓰기 방식: 문자열이 한 라인 이내일 때 기본버퍼안에 번역문을 덮어쓰는 방식

- 포인터 방식: 문자열이 한 라인 이상일 때 따로 버퍼를 잡아 집어넣은 다음 버퍼의 포인터만

  기본버퍼의 첫 4바이트에 기록하는 방식

- 스마트 방식: 문자열의 길이에 따라 덮어쓰기 방식과 포인터 방식을 자동선택하는 방식

 

제가 이해한 부가옵션과 동작방식

- SMSTR(부가옵션 없음. 기본): 스마트 방식을 따르되 번역문의 길이에 맞춰서 방식을 변경함. 원문이

덮어쓰기 방식이더라도 번역문이 한 라인 이상이면 포인터 방식으로 변경하고 원문이 포인터

방식이더라도 번역문이 한 라인 이내라면 덮어쓰기 방식으로 변경한다.

 

- SMSTR (MATCH) : 스마트 방식을 따르되 원문보다 번역문이 길면 번역문을 자르고, 짧으면 공백을

넣어 총 길이를 맞추는 방식. 따라서 총 길이가 동일하므로 원문이 덮어쓰기 방식이면 번역문도

덮어쓰기 방식이고 원문이 포인터 방식이면 번역문도 포인터 방식으로 동작한다. 이 때의 버퍼는

아랄트랜스의 번역 버퍼가 아닌 원래 게임에서 할당한 버퍼에 덮어쓴다.

 

- SMSTR(FORCEPTR): 번역문의 길이에 상관없이 무조건 포인터 방식으로 동작함. 설령 내용이 한 글자라도

무조건 포인터 방식으로 변경한다. 여기서 사용하는 것은 무조건 아랄트랜스의 번역 버퍼.

 

- SMSTR(IGNORE): SMSTR(기본) 과 동일하지만 아랄트랜스의 번역 버퍼를 사용하지 않고 게임이

할당해놓은 버퍼에 덮어쓴다. 번역문이 길 경우 버퍼 한계를 넘어설 가능성이 있을 수 있다.

 

혹시라도 제가 잘못 이해하고 있는 것이 있거나, 이 중 필요없는 옵션이 있거나, 반대로 필요한 옵션이

있으시면 알려주세요. 단, 토끼도 이해할 수 있도록 자세히 알려주셔야 합니다...

분류 :
Talk
조회 수 :
3800
등록일 :
2012.02.14
23:46:04
엮인글 :
https://arallab.hided.net/49640/893/trackback
게시글 주소 :
https://arallab.hided.net/board_devtalk/49640

FrigateBird

2012.02.16
17:48:54

요새 시간이 없어서 통 못왔네요...

읽어보니 필요한게 다 있군요.

 

잘 안쓰는 녀석이라면 SMSTR(FORCEPTR) 정도 겠네요.

실제 이런류가 프로그램상에서 있긴 했었습니다만..

거의 길이가 작은 녀석 전용으로 겨냥한 내용에 사용하더군요.

(길이가 한라인 이내의 내용들이 무조건 옴. ex.명령어, 특문)

 

딱히 그 부분만 피해서 코드를 짜면 SMSTR(FORCEPTR)는 필요가 없지만..

 

방법을 바꾸면 SMSTR(FORCEPTR) 가 요긴하게 쓰이게 됩니다.

예를 들어 SMSTR(FORCEPTR)의 기능에서 길이의 위치만 직접 위치 선정할 수 있으면 좋겠네요.

 

원래 위 기능의 동작방식은..

기본버퍼의 첫 4바이트에 포인터 방식으로 대사가 있다는 전제하에 (버퍼는 아랄 버퍼)

겨냥한 버퍼+0x10 위치에 길이,      버퍼+0x14 위치에 최대 길이(0x0F+0x?0형태)

를 수정하는 형태이겠지요?

(아니라면 태클걸어주세요)

 

거기서 "버퍼+0x14 위치에 최대 길이" 의 계산식은 제거해주시고(없다고 생각하시고),

"버퍼+0x10 위치에 길이" 의 "+0x10" 위치를 유동성으로 선택 가능하게

기능이 추가 되었으면 합니다.

 

ex)

EDX 에 후킹

SMSTR(FORCEPTR(0x4))

[EDX] : 아랄 버퍼로 포인터 변경(원래 동작방식)

EDX+0x4 : 해당 지점에 길이 있음. (원래 길이가 +0x10 위치라면 지금은 포인터 옆인 +0x4 위치에 있다는 소리)

whoami

2012.02.16
20:22:39

아. 실은 SMSTR 기능과 별도로 길이 보정 기능을 넣으려 하고 있습니다. OVERWRITE나 PTRCHEAT 에서도

일반 옵션으로..예를 들면 LEN(4,1) - pArgText 위치부터 +4바이트 위치에 1바이트 형식으로 길이 정보가 있으니

번역문 길이로 바꿔넣어라 - 처럼 말이죠. 이렇게 하면 말씀하신 기능은 PTRCHEAT+LEN() 으로 대치가 가능할

듯 싶군요.

 

그러면 SMSTR 에서 FORCEPTR 은 필요 없고, 다른 두 가지 기능은 다 필요하다 이 말씀이시죠?

 

그리고.. 그 외에 추가하면 좋을 기능이 있으면 같이 적어두세요.

 

FrigateBird

2012.03.02
17:35:29

추가하면 좋을 것 같은 기능 1.

 

현 ATCode 인지 이지트랜스 함수 문제인지 기억은 아리송한데

 

번역길이가 2MB (4MB 였나?) 를 넘어가면 그만한 버퍼 생성 불가로 뻗어버리더군요.

(생성하지 않고 그냥 이지트랜스로 보내버려도 그쪽 함수에서도 제한 버퍼가 있던걸로 기억합니다.)

 

이런 글의 번역 해결 방안으로는 개행이나 특정 글(특정문자)을 기준으로 여러번 돌려 번역한다는 정도인데..

아랄 버퍼로 바꿀 시 그게 버틸지 의문이네요.

구린 컴에서는 안된다거나 하는 사태가 없어야 하는데;

 

기리기리 마냥 비슷한 꼴로 돌아가되 ATCode 같이 사용자 지정 위치에서 적용되는

스크립 번역 기반이 필요할 듯 싶습니다.

(몇가지 간소한거 설정하고...말이지요)

whoami

2012.03.02
18:01:00

ATCode 내에서 문자 최대 길이 (MAX_TEXT_LENGTH) 가 1024 로 되어 있습니다. *2 해서 2048 바이트죠.

하지만 이걸 수정하는 것이 좀 골치아픈게 중간에 걸려있는 모든 필터/번역기와 크기를 맞춰야 한다는 것이죠.

 

방법이 하나 있기는 합니다. 아랄트랜스 전역설정으로 버퍼크기를 잡아놓고 모든 플러그인이 이 크기를

기준으로 버퍼를 동적할당하도록 만들어 버리면 됩니다. 물론 모든 플러그인 업데이트를 해야 한다는

문제가 생깁니다만.. 어쨌든 방법은 방법이죠.

 

그런데 거꾸로.. 1024 문자가 필요할 정도로 큰 문자열이 쓰이느냐 하는 문제를 고려해봐야 합니다.

 

물론 기리기리 같은 풀셋 스크립트 같은 경우 1024 문자는 당연히 모자랍니다만, 이런 풀셋 스크립트

엔진이 그리 많은 것이 아니라고 볼 때 차라리 전용 후킹 플러그인을 하나 개발하는 것이 편할지도 모릅니다.

 

대사와 대사 사이 문장종료를 \0 을 안쓰는 스크립트라면.. 그런 종류가 적다면 전용 후킹 플러그인을

사용하거나, 꽤 많다면 문장종료 문자를 다른 문자로 인식하는 옵션을 넣던가요. 어차피 전체 스크립트를

한번에 보내버린다 하더라도 중간에서 문장종료 표시를 다른 글자 (\n 이라던가)로 바꿔넣어줘야 제대로

동작하겠습니다만.. 하지만 이렇게 되면 일반적으로 사용하는 C/C++ 라이브러리를 못쓰게 되기 때문에

전체적으로 무지하게 복잡해진다는 단점이 생기긴 합니다...

List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜sort 최근 수정일
공지 Talk [필독] 테스트필터 사용시 주의사항 라파에 155439   2008-08-03 2008-12-16 00:03
44 Talk JSCustom의 초기 골격 코드를 SVN에 커밋했습니다. [1] Hide_D 33949   2010-09-18 2010-10-25 09:57
지금 안된 부분이.... 1. 고수준 함수, 고수준 보조 함수 구현 ( http://wiki.aralgood.com/index.php/JSCustom/FunctionReference ) 2. 아랄트랜스 0.3버전용 함수 구현 3. 아랄트랜스 플러그인 규격과 v8Wrapper 모듈의 연결 4. UI 정도네요. 올리긴 했지만 ...  
43 Talk [뻘글] 요새 프로텍터가 하도 무서워서 Hide_D 22878   2010-10-26 2010-10-26 00:15
대상 클라이언트에 최소한의 Injector만 '꽂아'두고 실제 동작은 '서버'에서 Injector와 IPC만으로 구동하는 형식은 어떨까 싶군요. Injector에서 '메모리' 입출력 관현 함수와 기본 WinAPI에 사용되는 DLL 로드(이건 위험하지 않으니까!)와 실제 WinAPI를 실...  
42 Talk KiriKiri 텍스트 파싱 개선 프로젝트! Hide_D 22403   2010-10-28 2010-10-28 00:21
필요가 생겨서[!] 이제 좀 개선을 시켜볼 생각입니다. 우선 문제가 되는 곳은 text=""겠군요  
41 Talk ATCode에 @가 붙은 글꼴을 빼버려야겠군요 Hide_D 16792   2010-12-11 2010-12-11 16:28
질문 게시판에 백년 만년 올라오는 왜 글자가 옆으로 누워있죠? 를 막으려면 역시 @붙은 글꼴은 빼는게 제격입니다 ㅠ 대신 아래에 체크로 @ 허용 같은거 하나 만들어두고요  
40 Talk DenyWord + 정규표현식? Hide_D 17305   2010-12-18 2010-12-18 00:05
어차피 문자열을 찾는 구조였으니 그냥 Boost꺼나 C++0x의 STL에 달려있는 정규표현식 모듈 들고와서 Deny, Allow, Exact에다 정규 표현식도 합쳐볼까요?  
39 Talk 웹 계정 아이디/비밀번호 secret Hide_D 1   2011-01-02 2011-01-02 16:21
비밀글입니다.  
38 Talk 폰트함수인덧 아무개 18005   2011-01-11 2011-01-11 23:38
CreateFontIndirect_Correct 누가 후킹 하나열[...........]  
37 Talk AppLoc.exe를 거치지 않고 AppLocale 가동시키는 법! Hide_D 18684   2011-01-28 2011-01-28 01:54
환경 변수 두개를 다음과 같이 세팅합니다. set __COMPAT_LAYER=#APPLICATIONLOCALE set AppLocaleID=411 그리고 나서 원하는 프로그램을 돌리면 자동으로 AlLayer.dll이 인젝션 됩니다.  
36 Talk 작전명. '누덕누덕' 작전 시작 Hide_D 10674   2011-02-18 2011-02-18 00:02
AralTrans 0.2에서 시작해서 눈꼽만큼씩 고쳐나갈 생각입니다. 주 타겟 OS : Windows 7 32bit 목표 일자 : 2012년 오기 전 PS : JSCustom 프로젝트는 연기되었습니다.  
35 Talk AT 0.3 재설계 프로젝트 [1] 아랄 10551   2011-04-16 2011-04-17 09:52
1. 인젝터-서버 방식 2. IDE = vs2010 3. AT 0.3에서 시도하려 했던 중복 기능의 모듈화는 유효, 모듈 명명은 언제든 변할 수 있음 FontMapper, UITrans 4. 스크립트 엔진 = v8 5. 각 플러그인은 운용중인 파일을 반환하는 인터페이스를 가져야 함 6. Launcher...  
34 Talk 컨텍스트 구조 제안(핸들러 구조) [4] Hide_D 8336   2011-04-21 2011-04-23 20:17
가령 모듈 3가지가 DumpText, FixLine, EzTransXP 요렇게 있다고 가정할때 var c0_EzTransXP = new EzTransXP("NoSpace"); var c0_DumpText = new DumpText("KOut,KHex,KHex16"); var c0_FixLine = new FixLine("/ATData/c0.dat"); c0_DumpText.setNext(c0_EzT...  
33 Talk Windows 7, UAC, 64bit Hide_D 9107   2011-04-24 2011-06-28 01:25
사실상 요새 구입하는 '최신형' 컴퓨터들이 갖는 세팅이 Windows 7 64bit에다가 UAC를 기본값으로 두고 사용하는 방식인데, 기존 아랄트랜스가 여기에 대응하지 못하는 부분이 많습니다. Windows 7 - 사실 이게 제일 속편합니다. 이거 자체로는 문제되는 부분...  
32 Talk FrigateBird님의 ATCode 20111003버전에 대하여.. [9] whoami 4957   2011-11-02 2011-12-10 16:16
일단 FrigateBird(잘 알려진 피시로 호칭)님의 ATCode 20111003 (줄여서 1003버전) 을 한번 훑어보았는데요, 1003 버전의 주된 변경점은 Siglus 엔진에 대한 지원이 주를 이루고 있습니다. 물론 기존 ATCode 의 버그를 잡은 것도 있지만 마이너하니 넘어갑니다...  
31 Talk AralTrans, ATCTNR 111112 버전 SVN에 추가. [1] whoami 5260   2011-11-12 2012-06-17 14:29
ATCTNR 의 SVN 소스가 후킹모드 2로 되어있었는데.. 아마 예전에 지나가다정착한이A 님이 발안해서 테스트하던 후킹모드 2 판의 소스가 올라가있었던 듯 합니다. 뭐.. 실제 머리싸매고 고민하다 보니 의외로 돌려놓기가 어렵지 않아서 후킹모드 1로 돌려놓고 ...  
30 Talk XP3Dumper! [1] Hide_D 5000   2011-12-12 2011-12-24 02:57
기리기리랑 합치면 좀 재밌는게 나올 것 같아서 뜯어보고 있습니다. 결과물은 아마 내년(ㅋㅋㅋ)에 나올것 같네요  
29 Talk AralTrans 20120214 버전 변경점 [6] whoami 4193   2012-02-14 2012-06-17 14:29
아랄트랜스 20120214 버전에서의 변경점 1. ATCTNR.dll 버그 수정 - 모듈 정보에서 이미지 파일 크기가 부정확할 경우 Access Violation 에러가 나는 문제 해결. Rewrite (Key) 에서 작동 확인. 다른 게임은 미확인이나 피시님의 ATCTNR 패치가 거의 동일하기 ...  
28 Talk CustomDic의 동작 방식에 대해서 secret Hide_D 4   2012-02-14 2012-02-14 13:36
비밀글입니다.  
» Talk SMSTR 의 부가옵션에 대한 토론.. [4] whoami 3800   2012-02-14 2012-07-12 19:27
ATCode 테스트버전 120207 의 댓글이 너무 복잡하게 꼬여서 이쪽으로 뺍니다. 현재 120207 에서 SMSTR 은 기본적으로 피시님 버전의 OVERWRITE(IGNORE,BUFCHANGE) 모드로만 돌아가도록 만들어져 있습니다. 그런데 피시님께서 부가기능이 필요하시다고 하셨는데...  
26 Talk ATCode 새로운 기능 추가. [5] EroGame 2518   2012-04-01 2012-04-03 19:19
제가 시간만 된다면 약간의 데모스럽게 소스라도 올려드리는데.. 좀 여의치 않군요. 일단 생각한 방안입니다. 예전부터 필요한 기능이라 생각했는데 이래저래 고민 끝에 해결방안이 나왔습니다. 현재 ATCode의 후킹 방식은 한 함수 내에 후킹 지점부터 리턴 포...  
25 Talk 어김없이 기능추가 건의입니다. [3] EroGame 1865   2012-04-22 2012-05-05 09:15
그 뭐냐. 스마트 기능이 어째 제대로 빛을 발휘하지 못하고 있습니다. 왜그런가 되돌아서 생각해보니 발더스카이 개조할때 구현한 기능중 하나가 스마트에서 빠졌다는겁니다;; 그래서 요번 기가 사에서 나온 게임들 전부가 에러 팅팅 거리면서 꺼지더군요. OTL...