gpt4 book ai didi

c - GDB/GNU 程序集 : test %esi, %esi 返回不相等?

转载 作者:太空宇宙 更新时间:2023-11-04 00:30:45 24 4
gpt4 key购买 nike

我正在做家庭作业。我们得到了一个预编译的二进制文件,我们必须使用 gdb获取程序集转储、遍历数据结构、查看存储在内存中的值等,以便弄清楚二进制文件的作用。以下是来自函数调用的几行反汇编程序转储:

0x08048e14 <+21>:   test   %esi,%esi
0x08048e16 <+23>: jne 0x8048e4b <fun6+76>
0x08048e18 <+25>: jmp 0x8048e5d <fun6+94>

我假设 test %esi,%esi将始终返回“等于”的结果(或者更确切地说,使用寄存器标志表示的等效语句,我相信它只是设置了ZF?),并且jne指令永远不会执行,相反,程序将执行行 <+25> 处的指令.但是,在执行完这些指令后,程序跳转到 <+76> 行!为什么会这样?我很困惑。

如果有助于解释答案,这里是 test 之后的寄存器标志指令 <+21> (未设置 ZF?)(我仍然不知道如何解释这些标志):

eflags         0x202    [ IF ]

最佳答案

test 指令执行按位AND,但不存储结果;它只设置标志。

jne实际上是“如果ZF不等于0则跳转”,所以这里是测试esi是否为零。

另见 How does the `test` instruction work?What does the `test` instruction do?

关于c - GDB/GNU 程序集 : test %esi, %esi 返回不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19216813/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com