2014-10-16 2 views
-1

실행하면 6 개의 다른 문자열을 입력하라는 메시지가 나타납니다. 이 중 하나라도 잘못되면 폭탄이 폭발하여 오류 메시지가 인쇄되고 등급 서버에 이벤트가 기록됩니다. 학생들은 6 개의 줄을 결정하기 위해 프로그램을 분해하고 역 설계하여 자신의 고유 한 폭탄을 "해체"해야합니다. 당신이 그것의 대부분은 알아 냈있어 같은조립품 - movbzl은 무엇입니까

0x08048e35 <+99>: mov $0x69,%eax     
    0x08048e3a <+104>: jmp 0x8048f0e <phase_3+316> 
    0x08048e3f <+109>: cmpl $0x1ce,-0x10(%ebp) 
    0x08048e46 <+116>: je  0x8048f09 <phase_3+311> 
    0x08048e4c <+122>: call 0x8049168 <explode_bomb> 
    0x08048e51 <+127>: mov $0x68,%eax 
    0x08048e56 <+132>: jmp 0x8048f0e <phase_3+316> 
    0x08048e5b <+137>: mov $0x72,%eax 
    0x08048e60 <+142>: cmpl $0xa9,-0x10(%ebp) 
    0x08048e67 <+149>: je  0x8048f0e <phase_3+316> 
    0x08048e6d <+155>: call 0x8049168 <explode_bomb> 
    0x08048e72 <+160>: mov $0x72,%eax 
    0x08048e77 <+165>: jmp 0x8048f0e <phase_3+316> 
    0x08048e7c <+170>: mov $0x62,%eax 
    0x08048e81 <+175>: cmpl $0xbb,-0x10(%ebp) 
    0x08048e88 <+182>: je  0x8048f0e <phase_3+316> 
    0x08048e8e <+188>: call 0x8049168 <explode_bomb> 
    0x08048e93 <+193>: mov $0x62,%eax 
    0x08048e98 <+198>: jmp 0x8048f0e <phase_3+316> 
    0x08048e9a <+200>: cmpl $0xe0,-0x10(%ebp) 
    0x08048ea1 <+207>: je  0x8048f09 <phase_3+311> 
    0x08048ea3 <+209>: call 0x8049168 <explode_bomb> 
    0x08048ea8 <+214>: mov $0x68,%eax 
    0x08048ead <+219>: jmp 0x8048f0e <phase_3+316> 
    0x08048eaf <+221>: mov $0x79,%eax 
    0x08048eb4 <+226>: cmpl $0x2e2,-0x10(%ebp) 
    0x08048ebb <+233>: je  0x8048f0e <phase_3+316> 
    0x08048ebd <+235>: call 0x8049168 <explode_bomb> 
    0x08048ec2 <+240>: mov $0x79,%eax 
    0x08048ec7 <+245>: jmp 0x8048f0e <phase_3+316> 
    0x08048ec9 <+247>: mov $0x6b,%eax 
    0x08048ece <+252>: cmpl $0x3ba,-0x10(%ebp) 
    0x08048ed5 <+259>: je  0x8048f0e <phase_3+316> 
    0x08048ed7 <+261>: call 0x8049168 <explode_bomb> 
    0x08048edc <+266>: mov $0x6b,%eax 
    0x08048ee1 <+271>: jmp 0x8048f0e <phase_3+316> 
    0x08048ee3 <+273>: mov $0x61,%eax 
    0x08048ee8 <+278>: cmpl $0x2a8,-0x10(%ebp) 
    0x08048eef <+285>: je  0x8048f0e <phase_3+316> 
    0x08048ef1 <+287>: call 0x8049168 <explode_bomb> 
    0x08048ef6 <+292>: mov $0x61,%eax 
    0x08048efb <+297>: jmp 0x8048f0e <phase_3+316> 
    0x08048efd <+299>: call 0x8049168 <explode_bomb> 
+1

이 질문은 다른 미래의 방문자를 도울 가능성이 적기 때문에 주제와 관련이없는 것으로 보입니다. – karlphillip

+0

@karlphillip : 불행히도 그건 사실이 아닙니다. 더 많은 열정적 인 응답자 중 한 명은 "모든"폭탄 관련 질문자의 이익에 많은 "답변"을 줄 때까지는 시간 문제 일뿐입니다 (차례 차례로 나쁜 프로그래머의 수가 급격히 증가 할 수는 있겠지만, 분명히 사회 다윈주의 그것의 걸릴 것입니다). – usr2564301

+1

@Jongware 나는 당신이 말하는 것을 이해하지만, 세계의 많은 사람들이 자기 반으로 가서이 문제에 접근 할 수있는 것처럼 보이지 않습니다. 나는 또한 Stackoverflow가 숙제 문제를 더 이상하지 않는다고 생각했다. 그건 그렇고, 나는 그 질문에 투표하지 않았지만 여전히 나쁜 생각이라고 생각합니다. – karlphillip

답변

1

보인다. Line +43은 실제로 정수 상수를 보유하는 배열에 액세스하고 있습니다. %ecx이 4로 스케일링되기 때문에 이것을 알 수 있습니다. 또한 %ecx이 낮은 4 비트 만 유지하도록 마스크되었으므로이 테이블의 크기는 16입니다. 따라서 x/16w 0x804a380을 사용하여 인쇄 할 수 있습니다.

어레이 항목은 이전에 0으로 설정되어있는 %edx에 간단하게 추가됩니다. 따라서 %edx은 모든 배열 항목의 합계를 입력 문자열의 하위 4 비트 문자로 인덱싱합니다. 그런 다음 합계가 36인지 여부를 확인합니다.

따라서 폭탄을 사용하지 않으려면 합계가 36 인 6 개의 배열 항목을 찾고 배열의 적절한 하위 4 비트를 가진 임의의 문자를 선택하면됩니다 지수 (순서에 관계없이).

this question도 참조하십시오. 다소 비슷합니다.

관련 문제