【发布时间】:2012-02-16 11:28:42
【问题描述】:
所以我在 x86 汇编中有以下代码段:
mov $0x0, %eax
callq 400ac8 <__isoc99_sscanf@plt>
cmp $0x5,%eax
jg 40152d <this_function+0x3d> -----> jumps to add two lines down
callq 4014b a <error_program>
add $0x18,%rsp
retq
现在在第一行,它将 %eax 设置为零。然后它调用 sscanf 然后检查 %eax 是否为 5。如果它大于 5,它将继续,否则终止。所以我做了一个简单的C代码:
eax = 0;
sscanf();
if (eax < 5) error_program();
return;
这是一个二进制文件的对象转储,所以我确信它是正确的。但是,eax 将始终为零,并且错误将触发。我是对的吗?或者 sscanf 有没有可能操纵 eax?
谢谢
【问题讨论】:
-
这没有意义 - 程序不会每次都终止..
-
我对你在这里的内容感到很困惑,我认为你可能应该包括更多的周边代码、调用示例等。(我删除了我的第一条评论,因为回想起来它似乎没有足够有用。)
-
"这是一个二进制文件的对象转储,所以我确信它是正确的。"一个做线性扫描的静态反汇编器很容易被愚弄