这似乎是常识,但我无法在互联网上找到它。但
当程序有
时call <JMP.&msvcrt.strcmp>
比较什么值?我不确定,因为cmp它已经陈述了(cmp eax,ebp)。
我知道比较结果会在EAX寄存器中返回,如果有帮助的话。
答案 0 :(得分:3)
您正尝试将strcmp
与汇编指令cmp
相关联。但它们是不同的东西。例如,在处理器级别(汇编)中,cmp A, B
比较2个不同的寄存器,并将结果设置为某些标志。标志是可以通过其他指令(如jz
,jnz
)测试的位,然后根据所需的意图重定向流。
当您执行call strcmp
时,您实际上正在调用“高级函数”(高级别,与汇编相比),这将执行大量的事情来比较2 C-样式字符串。一旦每个编译器/平台给出不同的机器指令结果,就不容易知道将使用哪些寄存器(其中许多将被使用)。
如果你明白这一点,你会发现它实际上并不重要,因为范式有点不同:
cmp
是汇编指令。strcmp
不是汇编指令,而是函数。