下面是我正在查看的程序集代码:
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。但传递给它的函数需要字符串。那么0x804a170
应该转换成字符串吗?这个字符串就是输入应该等于的值?我不知道。如果有人看到任何缺点或可以给我一个指针,这是非常感谢!
最佳答案
0x804a170
是指向运行时认为是“字符串”的对象的指针。由于您没有给出它是什么的信息,我们只能猜测它是指向第一个字符的指针,后面跟着更多的字符并以0
结尾,或者是指向第一个字符的指针,前面的1/2/4/8字节将长度描述为整数。
这不是绳子本身。
关于c - 将汇编转换为C程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33623004/