这似乎是常识,但我找不到它写在互联网上(还)。
当一个程序有
call <JMP.&msvcrt.strcmp>
Run Code Online (Sandbox Code Playgroud)
比较什么值?我不确定,因为使用 cmp 说明了 (cmp eax, ebp)。
如果有帮助,我知道比较的结果会在 EAX 寄存器中返回。
您正试图strcmp与汇编指令相关联cmp。但它们是不同的东西。例如,在处理器级(汇编)中,cmp A, B比较 2 个不同的寄存器,并将结果设置在一些标志中。标志是可以由其他指令(如jz, jnz)测试的位,然后根据所需的意图重定向流。
当您执行 a 时,call strcmp您实际上是在调用“高级函数”(与 assembly 相比是高级函数),它将执行很多操作来比较 2 个 C 样式字符串。知道将使用哪些寄存器并不容易(其中许多可能会使用),一旦每个编译器/平台将给出不同的机器指令结果。
如果你理解了这一点,你会发现其实这并不重要,因为范式有点不同:
cmp 是汇编指令。strcmp 不是汇编指令,而是函数。