で実行プログラムのアセンブリを読み、このプログラムが何をしているか説明しなければいけないのですが、読めなくて困っています。
出題者からヒントを出されて、逆アセンブリの結果の一部(以下に記載)である<fff>, <main>のところを読めばわかるとのことなのですが
理解できません。
何かしらの値が1以下か2以上かで分岐している処理があるのはわかるのですが、このプログラムが何をしているかと言われると答えられません。
環境は、zenithで動き、zenithのOSは64bitのlinux(Redhat)です。
00000000004004d8 <fff>:
4004d8: 55 push %rbp
4004d9: 48 89 e5 mov %rsp,%rbp
4004dc: 53 push %rbx
4004dd: 48 83 ec 08 sub $0x8,%rsp
4004e1: 89 7d f4 mov %edi,0xfffffffffffffff4(%rbp)
4004e4: 83 7d f4 01 cmpl $0x1,0xfffffffffffffff4(%rbp)
4004e8: 74 06 je 4004f0 <fff+0x18>
4004ea: 83 7d f4 02 cmpl $0x2,0xfffffffffffffff4(%rbp)
4004ee: 75 09 jne 4004f9 <fff+0x21>
4004f0: c7 45 f0 01 00 00 00 movl $0x1,0xfffffffffffffff0(%rbp)
4004f7: eb 1d jmp 400516 <fff+0x3e>
4004f9: 8b 7d f4 mov 0xfffffffffffffff4(%rbp),%edi
4004fc: 83 ef 01 sub $0x1,%edi
4004ff: e8 d4 ff ff ff callq 4004d8 <fff>
400504: 89 c3 mov %eax,%ebx
400506: 8b 7d f4 mov 0xfffffffffffffff4(%rbp),%edi
400509: 83 ef 02 sub $0x2,%edi
40050c: e8 c7 ff ff ff callq 4004d8 <fff>
400511: 01 c3 add %eax,%ebx
400513: 89 5d f0 mov %ebx,0xfffffffffffffff0(%rbp)
400516: 8b 45 f0 mov 0xfffffffffffffff0(%rbp),%eax
400519: 48 83 c4 08 add $0x8,%rsp
40051d: 5b pop %rbx
40051e: c9 leaveq
40051f: c3 retq
0000000000400520 <main>:
400520: 55 push %rbp
400521: 48 89 e5 mov %rsp,%rbp
400524: 48 83 ec 10 sub $0x10,%rsp
400528: 48 8d 75 fc lea 0xfffffffffffffffc(%rbp),%rsi
40052c: bf 58 06 40 00 mov $0x400658,%edi
400531: b8 00 00 00 00 mov $0x0,%eax
400536: e8 b5 fe ff ff callq 4003f0 <scanf@plt>
40053b: 8b 7d fc mov 0xfffffffffffffffc(%rbp),%edi
40053e: e8 95 ff ff ff callq 4004d8 <fff>
400543: 89 c6 mov %eax,%esi
400545: bf 5b 06 40 00 mov $0x40065b,%edi
40054a: b8 00 00 00 00 mov $0x0,%eax
40054f: e8 7c fe ff ff callq 4003d0 <printf@plt>
400554: c9 leaveq
400555: c3 retq
400556: 90 nop
400557: 90 nop
400558: 90 nop
400559: 90 nop
40055a: 90 nop
40055b: 90 nop
40055c: 90 nop
40055d: 90 nop
40055e: 90 nop
40055f: 90 nop