У меня есть вопрос, по которому мне нужна помощь.Я должен определить пароль (ответ) на эту проблему, который является одним из параметров в сборке.
Вывод:
На этом уровне вам нужно будет использовать gdb, чтобы найтипароль в том виде, как он передается в качестве параметра функции с 6 параметрами.Для x86-64 мнемоника для передачи параметров с помощью регистров - это Silk Dress Diane стоимостью $ 89.(rdi rsi rdx rcx r8 r9)
Введите пароль:
Код objdump функции, которую я считаю, имеет 6 параметров -
00000000004006a1 <foo>:
4006a1: 55 push %rbp
4006a2: 48 89 e5 mov %rsp,%rbp
4006a5: 53 push %rbx
4006a6: 48 83 ec 48 sub $0x48,%rsp
4006aa: 48 89 7d d8 mov %rdi,-0x28(%rbp)
4006ae: 48 89 75 d0 mov %rsi,-0x30(%rbp)
4006b2: 48 89 55 c8 mov %rdx,-0x38(%rbp)
4006b6: 48 89 4d c0 mov %rcx,-0x40(%rbp)
4006ba: 4c 89 45 b8 mov %r8,-0x48(%rbp)
4006be: 4c 89 4d b0 mov %r9,-0x50(%rbp)
4006c2: c7 45 e4 01 00 00 00 movl $0x1,-0x1c(%rbp)
4006c9: 48 8b 45 c0 mov -0x40(%rbp),%rax
4006cd: 48 89 c7 mov %rax,%rdi
4006d0: e8 5b fe ff ff callq 400530 <strlen@plt>
4006d5: 89 45 ec mov %eax,-0x14(%rbp)
4006d8: 8b 45 ec mov -0x14(%rbp),%eax
4006db: 48 63 d8 movslq %eax,%rbx
4006de: 48 8b 45 b0 mov -0x50(%rbp),%rax
4006e2: 48 89 c7 mov %rax,%rdi
4006e5: e8 46 fe ff ff callq 400530 <strlen@plt>
4006ea: 48 39 c3 cmp %rax,%rbx
4006ed: 74 07 je 4006f6 <foo+0x55>
4006ef: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%rbp)
4006f6: c7 45 e8 00 00 00 00 movl $0x0,-0x18(%rbp)
4006fd: eb 31 jmp 400730 <foo+0x8f>
4006ff: 8b 45 e8 mov -0x18(%rbp),%eax
400702: 48 63 d0 movslq %eax,%rdx
400705: 48 8b 45 b8 mov -0x48(%rbp),%rax
400709: 48 01 d0 add %rdx,%rax
40070c: 0f b6 10 movzbl (%rax),%edx
40070f: 8b 45 e8 mov -0x18(%rbp),%eax
400712: 48 63 c8 movslq %eax,%rcx
400715: 48 8b 45 b0 mov -0x50(%rbp),%rax
400719: 48 01 c8 add %rcx,%rax
40071c: 0f b6 00 movzbl (%rax),%eax
40071f: 38 c2 cmp %al,%dl
400721: 74 09 je 40072c <foo+0x8b>
400723: c7 45 e4 00 00 00 00 movl $0x0,-0x1c(%rbp)
40072a: eb 0c jmp 400738 <foo+0x97>
40072c: 83 45 e8 01 addl $0x1,-0x18(%rbp)
400730: 8b 45 e8 mov -0x18(%rbp),%eax
400733: 3b 45 ec cmp -0x14(%rbp),%eax
400736: 7c c7 jl 4006ff <foo+0x5e>
400738: 8b 45 e4 mov -0x1c(%rbp),%eax
40073b: 48 83 c4 48 add $0x48,%rsp
40073f: 5b pop %rbx
400740: 5d pop %rbp
400741: c3 retq
Я верю из4006aa до 4006be это параметры.Однако, когда я вводил значения этих регистров один за другим в качестве ответа, он сказал, что это не правильный ответ (например, -0x28).Я попытался ввести ответы в десятичном, шестнадцатеричном и двоичном виде.Я использовал gdb для его отладки и распечатки 6 регистров параметров в функции и использую эти значения, полученные в качестве ответа по отдельности, это тоже не сработало.Я застрял.Могу ли я получить некоторые рекомендации о том, как решить эту проблему?
обратите внимание, что у меня нет доступа к коду c для этой проблемы или к ассемблерному коду, написанному человеком.Только код objdump и исполняемый файл.
Вот исполняемый файл, который мне дали для этого, если вы, ребята, захотите попробовать его сами, чтобы помочь мне: https://www.mediafire.com/file/uglm044vw87lb11/ParamsRegs