2010-03-06 2 views
2

소스 코드를 더 이상 사용할 수없는 C# 프로젝트를 도와 달라는 요청을 받았습니다. 다행스럽게도 프로젝트의 난독 화되지 않은 디버그 빌드를 사용할 수 있으므로 Reflector를 통해 실행 했으므로 재구성 된 소스 코드가 크게 잘 보입니다.리플렉터로 재구성 된 C# 문자열 이해

제가 궁금한 점이 하나 있습니다.

string str7 = new string(); 
str7.Value = strArray3[k]; 

지금, 문자열이 매개 변수가없는 생성자가없는 않으며는 Value 속성을 가지고 않습니다 꽤 명확하게 문자열을해야 일부 개체는 다음과 같이 나오고있다. 인스턴스화를 제거하고 .Value 속성을 제거하면 예상대로 작동하지만, Reflector 버그보다 더 많은 일이 있는지 이해하고 싶습니다.

다른 흥미로운 점은 거의 모든 변수가 원래 소리 나는 이름으로 재구성되었지만이 중 하나 (그리고 다른 일부)에는 임의의 이름이 할당 된 것처럼 보입니다.

모든 통찰력은 대단히 환영합니다.

답변

1

IL과 디 컴파일 된 C#을 같은 방법으로 게시 할 수 있습니까?

우연히 그 어셈블리에서 "클래스 문자열 {...}"이 (가) 있습니까?

+0

D' oh! 예, 어셈블리에 클래스 문자열이 있습니다. public 클래스 @string (@은 지난 주에 대해 배운 언어 이름을 심볼로 사용할 수 있음)과 같은 네임 스페이스 선언없이 포함되었습니다. 이것은 리버스 엔지니어링 프로세스의 인공물일까요? 왜 누군가가 의도적으로 그런 식으로 코딩하는지 상상하기 어렵습니다. –

+0

클래스 이름은 리버스 엔지니어링의 인공물이 아니지만 리플렉터는 C# 디 컴파일러에서 모든 참조를 벗어나는 데 실패한 버그가있을 수 있습니다. 결국 키워드 이름과 충돌하는 클래스는 다소 모호한 경우입니다. 왜 프로그래머가 다른 언어로 그 이름으로 클래스를 복제하려했는지, 아니면 아마도 역 설계를 수행하기 위해 디 컴파일러 지원이 좋지 않다는 것을 알고 목적에 따라 모호한 기능을 사용했을 수도 있습니다. 초능력 디버깅 점수 하나. –