할당은 일부 어셈블리 코드를 해석하여 "폭발 폭탄"을 호출하지 않고 실행할 구를 찾습니다. gdb를 사용하여 현재 단계를 디스 어셈블리합니다. 나는 갇혀있어 내가 올바른 방향으로 움직이고 있는지에 대한 조언은 매우 감사 할 것입니다. 해체하려고 시도합니다
0x0000000000400fb5 <+0>: sub $0x18,%rsp
0x0000000000400fb9 <+4>: lea 0x8(%rsp),%r8
0x0000000000400fbe <+9>: lea 0xf(%rsp),%rcx
0x0000000000400fc3 <+14>: lea 0x4(%rsp),%rdx
나는 무엇 일어나는 것은 우리가 %의 RSP (기본 포인터가 가리키는 것)의 문구를보고있는 것을 믿습니다. 나는 네 가지가 메모리에 저장되어 있다고 생각한다. (% rsp), 0x4 (% rsp), 0x8 (% rsp), 그리고 0xf (% rsp)로 3 개의 정수와 다른 것으로 생각한다. 물론.
0x0000000000400fc8 <+19>: mov $0x4028f6,%esi
주소 $ 0x4028f6의 값은 "% d % c % d"입니다. % esi를 등록하기 위해 이동 중임을 알고 있지만, 이것이 어떻게 사용되고 있는지 확실하지 않습니다.
0x0000000000400fcd <+24>: mov $0x0,%eax
0x0000000000400fd2 <+29>: callq 0x400c80 <[email protected]>
여기 무슨 일인지 잘 모르겠습니다. 나는 0x400c80에보고하고 다음 발견
0x0000000000400c80 <+0>: jmpq *0x20340a(%rip)
0x0000000000400c86 <+6>: pushq $0x12
0x0000000000400c8b <+11>: jmpq 0x400b50
내가 % 립이 레지스터로 사용되는 표시되지 않습니다를, 그래서 내가 할 또는 어디 있는지하는 것이 무엇인지 확실히 모르겠어요. 나는 그것이 % eax에 0x12를 놓고 있다고 생각하지만 0x400b50이 유효한 주소가 아니기 때문에 어디서 점프하는지 확신 할 수 없다. 어쨌든, 다시 원래의 기능 :
0x0000000000400fd7 <+34>: cmp $0x2,%eax
0x0000000000400fda <+37>: jg 0x400fe1 <phase_3+44>
0x0000000000400fdc <+39>: callq 0x401719 <explode_bomb>
나는 우리가 단지 %의 EAX에 0x18을 밀어 생각, 그래서 그것은 확실히 0x2로보다 큰 수 있습니다 및 프로그램이 "폭탄 폭발"건너 것입니다. 나는 그 지점까지 내가 어디까지 망쳐 놓고 있는지 알고 싶다.