我在汇编语言中遇到这段代码时遇到了麻烦。基本上我必须输入2个数字,匹配代码与之比较的2个数字。在phase_4的第0x08048c47行,它比较…
8(%esp) 是x86框架下的第一个数字。 输入 40 2 要么 60 3 要么 80 4 应该管用。
8(%esp)
40 2
60 3
80 4
相当于以下逻辑
#include <stdio.h> #include <stdlib.h> void explode_bomb() { printf("explode bomb.\n"); exit(1); } unsigned func4(int val, unsigned num) { int ret; if (val <= 0) return 0; if (num == 1) return 1; ret = func4(val - 1, num); ret += num; val -= 2; ret += func4(val, num); return ret; } void phase_4(const char *input) { unsigned num1, num2; if (sscanf(input, "%u %u", &num1, &num2) != 2) explode_bomb(); if (num2 - 2 > 2) explode_bomb(); if (func4(6, num2) != num1) explode_bomb(); } int main() { phase_4("40 2"); phase_4("60 3"); phase_4("80 4"); printf("success.\n"); return 0; }