마켓 플레이스에서 Eclipse Color Theme (코딩 컬러 스키마 모음) &

Eclipse Moonrise UI Theme (이클립스 UI 테마) 설치



추가 플러그인으로 설치된 Color Theme 에서 코드 컬러 스키마 설정


튜닝 끝.

Posted by $Zero
:

토비의 스프링 3.1 p.670의 내용을 진행한뒤 테스트를 돌려보면 EmbeddedDatabase 에서 에러가 발생해 테스트의 일부가 실패한다.


에러의 원인은 중복 스크립트 실행이다. (테이블이 이미 있는데 또 다시 생성 스크립트 실행)

원인을 파악하기 위해 학습테스트를 여럿 만들고 테스트 소스를 여기저기 수정해가며 파악해 봤다.



 @DirtiesContext 가 문제의 원인이었다.


이 애노테이션은 빈의 DI설정을 변경할경우 다음 테스트를 실행할 때 새로운 컨텍스트를 생성케 한다


문제는, 이 애노테이션으로 생성되는 컨텍스트는 완전히 새로운 컨텍스트가 아니라는 것이다.


컨텍스트가 빈을 다시 생성할 때 내장형 데이터베이스 역시 새로운 메모리에 생성해서 돌려주어야 하는데, 이 애노테이션으로 생성된 컨텍스트는

기존에 생성됐던 내장형 데이터베이스에 다시 작업을 진행한다.

이 과정에서 이미 테이블까지 완성시킨 내장 데이터베이스에 다시 한 번 테이블 스크립트를 실행하고 SQL익셉션을 내뱉는 것이다.


왜 이렇게 작동하는지는 아직 정확한 이유를 알 수 없다.


한가지 알 수 있는것은 @DirtiesContext 는 컨텍스트를 완전히 새로 생성하는 것이 아니라는 것이다.


DI의 정보가 수정된 빈만 새로생성해서 돌려주거나 하는 특수한 작업을 하는 것으로 추측된다.


Junit 테스트는 컨텍스트 생성에 실패하고 다음 테스트에 다시 한 번 완전히 새로운 컨텍스트를 생성해 진행하게 된다.

(이 부분은 온전히 새로운 컨텍스트이기에 내장형 데이터베이스도 새로 생성되며 스크립트의 중복실행 또한 없다.)


결과적으로 @DirtiesContext 이후에 새로생성된 불완전한 컨텍스트로인해

@DirtiesContext이 붙은 테스트 바로 다음에 실행되는 테스트는 컨텍스트를 생성하는 과정에서 스크립트 중복실행으로 테스트가 실패하는 것이다.


@DirtiesContext 이 빈을 재생성할 때 어떤 작업을 하길래 이러한 문제가 발생하는지 해결 방법은 없는지


언젠가 스프링의 소스코드를 분석하게되면 찾아봐야겠다.







'레퍼런스 > Framework' 카테고리의 다른 글

[MFC] ODBC 연결 에러  (0) 2016.01.29
Posted by $Zero
:





언팩완료.  클리어


내 수리능력이 참으로 원망스러웠던 문제..


고길님의 문서를 보고 마지막의 EAX와 EBX를 구해서 제일 처음의 EAX와 EBX로 만들고 언팩했다.


원본 파일에 트랩이 있어서 삽질을 조금. ..


오리지날 파일이 왜 제공됐는가 의문이었는데 원본 메모리를 뜯어보니 문서와 똑같이 따라하면 실패하도록 트랩이 설치되어있었다. -_-


goodluck ....


가장 처음의 EAX와 EBX를 구하는 소스코드 



#include <stdio.h>


int main(void)
{
    unsigned int prev = 0x726ee12b, ofst = 0x20c1085a, check = 0;
    unsigned char bhChk=0;
    unsigned int reEbx = 0x????????; 

// 가장 마지막의 Ebx값을 reEbx에 넣어주면 된다. 이 값을 적고 프로그램을 돌리면 바로 답이 나오기에 이 값은 블라인드 처리..

    _asm{
        push ebx
            push eax
            push edx
            push ecx
            xor ecx,ecx
            xor edx,edx
            xor ebx,ebx
            xor eax,eax
    }


    for(unsigned char i=0; i<=0xFF; i++){
        _asm{
            mov eax,ofst
                mov cl, i
                rol eax, cl
                xor eax, prev
                mov check, eax
                mov ebx, check
                mov bhChk, bh
                mov eax, prev
                mov cl, al
                ror ebx, cl
                mov check, ebx
        }
        if(bhChk == i)
        {
            printf("BH : %x, EBX : %x\n", i, check);
        }

        if(i == 0xFF){
            break;
        }
    }

    _asm{
    }

    for(unsigned int i=5; i<=0x1000; i++){
        _asm{
                mov ebx, reEbx
                mov eax, prev
                sub ebx, eax
                mov cl, bh
                rol eax, cl
                xor eax, ebx
                mov cl, al
                ror ebx, cl
                mov reEbx, ebx
                mov prev, eax
        }
    }



    _asm{
            pop ebx
            pop eax
            pop edx
            pop ecx
    }

    printf("prev EAX...EBX %x, %x\n", prev,reEbx);

    return 0;
}






'취미 > WarGame' 카테고리의 다른 글

[reversing.kr] Twist1  (0) 2015.02.27
[reversing.kr] Ransomware  (0) 2015.02.24
[reversing.kr] Direct3D FPS  (1) 2015.02.24
[reversing.kr] ImagePrc  (0) 2015.02.21
[reversing.kr] Position  (0) 2013.10.30
Posted by $Zero
: