【发布时间】:2016-02-10 22:02:08
【问题描述】:
这是我正在查看的汇编代码:
push %ebp
mov %esp, %epb
sub $0x18, %esp
movl $0x804a170, 0x4(%esp)
mov 0x8(%ebp), %eax
mov %eax, (%esp)
call 0x8048f9b <strings_not_equal>
test %eax, %eax
je 0x8048f78 <phase_1+34>
call 0x8049198 <failed>
leave
ret
目标是为程序集的函数提供正确的输入,以便跳转到函数phase_1+34。所以这是我到目前为止的解释:
前两行是函数的设置代码。第一个 'sub' 行通过向下移动 '%esp' 来分配空间以存储调用 strings_not_equal 函数的参数。我认为传递给strings_not_equal 的两个参数是0x804a170 和输入值。我假设 <strings_not_equal> 将返回 0 如果传递的字符串 是 相等。然后je 检查%eax & %eax 是否为零,这只会在%eax = 0 时发生。所以基本上,输入字符串似乎必须等于0x804a170。
到目前为止,有人发现任何缺陷吗?
此时,我被卡住了,我尝试过的方法不起作用。十进制的0x804a170 是 134521200。但是传递给它的函数需要 strings。那么0x804a170应该转换成字符串吗?那个字符串是输入应该等于什么?
我不知道。如果有人看到任何缺陷或可以给我指点,非常感谢!
【问题讨论】: