Итак, немного фона.Я начинающий с c и ассемблерным кодом, у нас есть назначение «бомба» (написанное на c), которое вызывает методы, которые требуют определенных паролей, но код не виден, и мне нужно определить правильный пароль, посмотрев на ассемблерный код.
Код указывает, что пароль для этого метода - 6 цифр, который передается как «ввод» в фазу метода 2 (я пытаюсь избежать запуска).
У меня проблемы с пониманиемчто здесь происходит, так что если кто-то может помочь мне перевести это на C-код, или если мне нужно просмотреть какие-либо конкретные регистры / местоположения, это очень поможет.Есть еще 4 этапа, каждый из которых должен быть более сложным, поэтому я хочу получить хорошее представление о том, как подходить к их чтению.
Также, если у кого-то есть хороший ресурс (например, таблица для печати) с кодом сборкиключевые слова, которые также были бы полезны, а также, если есть какие-либо различия между 32-битными и 64-битными регистрами, мне нужно беспокоиться не только об именах регистров.
(gdb) disas
Dump of assembler code for function phase_2:
0x0000000000400f49 <+0>: push %rbp
0x0000000000400f4a <+1>: push %rbx
0x0000000000400f4b <+2>: sub $0x28,%rsp
0x0000000000400f4f <+6>: mov %fs:0x28,%rax
0x0000000000400f58 <+15>: mov %rax,0x18(%rsp)
0x0000000000400f5d <+20>: xor %eax,%eax
0x0000000000400f5f <+22>: mov %rsp,%rsi
0x0000000000400f62 <+25>: callq 0x401708 <read_six_numbers>
0x0000000000400f67 <+30>: cmpl $0x0,(%rsp)
0x0000000000400f6b <+34>: jne 0x400f74 <phase_2+43>
0x0000000000400f6d <+36>: cmpl $0x1,0x4(%rsp)
0x0000000000400f72 <+41>: je 0x400f79 <phase_2+48>
0x0000000000400f74 <+43>: callq 0x4016d2 <explode_bomb>
0x0000000000400f79 <+48>: mov %rsp,%rbx
0x0000000000400f7c <+51>: lea 0x10(%rsp),%rbp
0x0000000000400f81 <+56>: mov 0x4(%rbx),%eax
0x0000000000400f84 <+59>: add (%rbx),%eax
0x0000000000400f86 <+61>: cmp %eax,0x8(%rbx)
0x0000000000400f89 <+64>: je 0x400f90 <phase_2+71>
=> 0x0000000000400f8b <+66>: callq 0x4016d2 <explode_bomb>
0x0000000000400f90 <+71>: add $0x4,%rbx
0x0000000000400f94 <+75>: cmp %rbp,%rbx
0x0000000000400f97 <+78>: jne 0x400f81 <phase_2+56>
0x0000000000400f99 <+80>: mov 0x18(%rsp),%rax
0x0000000000400f9e <+85>: xor %fs:0x28,%rax
0x0000000000400fa7 <+94>: je 0x400fae <phase_2+101>
0x0000000000400fa9 <+96>: callq 0x400b90 <__stack_chk_fail@plt>
0x0000000000400fae <+101>: add $0x28,%rsp
0x0000000000400fb2 <+105>: pop %rbx
0x0000000000400fb3 <+106>: pop %rbp
0x0000000000400fb4 <+107>: retq
End of assembler dump.