这是我正在查看的汇编代码:
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
应该转换成字符串?那个字符串是输入应该等于什么?
我不知道。如果有人发现任何缺陷或可以给我指点,我们将不胜感激!
最佳答案
0x804a170
是指向被运行时认为是“字符串”的东西的指针。由于您没有提供有关它是什么的信息,我们只能猜测它是指向第一个字符的指针,后跟更多字符并以 0
结尾,或者它是指向第一个字符的指针,并且前面的 1/2/4/8 字节将长度描述为整数。
它本身不是一个字符串。
关于c - 将汇编翻译成 C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623004/