下面是我正在查看的程序集代码:

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/

10-08 22:31