2013-05-05 2 views
0

Visual Studio 2010에서 .exe (원래 코드가 없으므로 어셈블러 만 볼 수 있음)를 사용하고 있습니다.Visual Studio 디스 어셈블리 : 중단 점 손실

int main() { 
    int points = 1000; 
    int games = 0; 

    srand ((unsigned int) time(NULL)); // random seed 

    while(true) { 
     games++; 
     playGame(&points, games); 
    keepPlaying(); 
    } 
    return 0; 
} 

플러스 두 호출 방법 (정말 쉬운 사람) : 가에서 생성 된 코드는 (정확히, 그것은이 알 수없는 사소한 변경)이 하나와 유사하다.

.exe를 디버깅하려고 할 때 F11 키를 누르면 모든 것이 잘됩니다. 코드를 읽고, 브레이크 포인트를 배치하고, 메인을 찾습니다. ...

하지만 멈추고 F5를 눌러 첫 번째 중단 점으로 이동하려고하면 프로그램이 다른 장소 메모리 내부. 따라서 중단 점 (사용하지 않는 메모리를 가리키는)을 찾을 수 없습니다.

다른 경우에는 중단 점을 찾을 때까지 줄 단위로 F10/F11을 사용합니다. 때로는 내가 그들을 발견했다 (그리고 그들이 가능하다) 그러나 나는 그들에게 도달 할 때까지 (F5) 실행을 시도하고 그것들을 통과한다.

예를 들어 Visual Studio에서 어셈블러를 항상 같은 메모리 장소에 배치하도록 할 수 있는지 아는 사람이 있습니까? 또는 내가 중단 점을 유지하도록 할 때마다 매번 한 줄씩 실행하지 않아도됩니다.

+0

ASLR에서 설명 할 수는 있지만 재부팅해야합니다. 대부분의 경우 이는 ** 의도적 인 ** 것입니다. 코드에 내장 된 기능으로 자신이하는 일을 막을 수 있습니다. 당신이 게임을 해킹 할 수 있도록 게임 라이센스를주는 게임 퍼블리셔는 없습니다. 그 시행을위한 펑크 스타일 스타일의 해킹. –

+0

먼저, 소프트웨어 엔지니어링 첫해 첫 번째 연습 문제를 해결하려고 노력 중이며 게임을 해킹하기위한 정보를 얻지 않으려 고합니다. 나는 운동의 진술과 내가받은 자료를 업로드 할 수도 있습니다 ... (당신은 스페인어 tho를 읽을 수 있어야합니다). – Hans

+0

이 답변이 편집되었거나 이전 항목 (내가 이해하려고 시도했지만 유용하다고 생각되는 항목)을 찾을 수 없다고 생각됩니다. 어쨌든, ASLR을 끌 수없는 것 같습니다. 내가 테스트 proyect를 만들 때 쉽게 찾을 수 있기 때문에 아마도 잘못된 방법으로 솔루션을 여는 Im. 이 페이지에서 속성 페이지에는 "공통 속성"및 "구성 속성"만 표시되며 링커에 대해서는 아무것도 표시되지 않습니다. 어쨌든 고맙겠습니다. 항상 이런 종류의 것을 알고 있습니다. 나는 내 문제에 대한 영혼을 알아 내려고 노력할 것이다. – Hans

답변

1

글쎄, 나는 로터리를 생각해 냈다. 다른 누군가가 똑같은 문제가 있다면, 브레이크 포인트를 만들고 라벨링함으로써 부분적으로 그것을 피할 수있다. 그 중 한 명은 첫 번째 줄에 있습니다.

예를 들어 main 메서드를 호출 할 때 또는 다른 메서드를 호출 할 때 다른 메서드를 배치 할 수 있습니다. 그런 다음 디버깅을 중지하고 다시 실행하는 대신 첫 번째 중단 점으로 이동하여 rigth 명령어> Stablish next instruction을 클릭하십시오.

그러나 데이터에 문제가 발생할 수 있으므로주의해야합니다. 그것은 저에게 효과적 이었지만 아마 아주 간단한 작업으로 사용했기 때문일 것입니다.

관련 문제