gpt4 book ai didi

c - x86 ADC 进位标志和长度

转载 作者:行者123 更新时间:2023-12-02 00:05:12 24 4
gpt4 key购买 nike

我只是对我用 C 编写的反汇编 32 位程序进行一些分析。以下是反汇编程序输出的一部分:

41153c  02 00   add al, [eax]
41153e 00 00 add [eax], al
411540 44 inc esp
411541 15 41 00 F8 FF adc eax, 0xfff80041 ; "A"
411546 FF invalid

我只是想弄清楚 ADC 指令。根据我在 Intel 开发人员手册和 x86 ASM 上的各种文章中所读到的内容,操作码 0x15 是使用 EAX 作为目标的 ADC 指令,并且操作码后面似乎是一个四字节的“立即数”,表示用于加进位的内存地址。

但是我有点不确定为什么以下字节 (0xFF) 被标记为无效。

我对汇编程序很陌生,但我假设这与进位标志有关,并且可能在那里对值进行符号扩展。

我使用了两个独立的反汇编器来查看代码,一个将其标记为无效,另一个则直接忽略它。

如果有人可以提供一些建议,我将不胜感激。

谢谢

更新

我将在这篇文章中添加更多信息,因为还有另外两个 ADC 操作,其中一个没有额外的“无效”字节

411547  FF 04 00    inc [eax+eax]
41154a 00 00 add [eax], al
41154c 61 popa
41154d 15 41 00 EC FF adc eax, 0xffec0041 ; "A"
411552 FF invalid

411553 FF 04 00 inc [eax+eax]
411556 00 00 add [eax], al
411558 5C pop esp
411559 15 41 00 74 65 adc eax, 0x65740041 ; "A"
41155e 73 74 jnc 0x4115d4 ↓

发生的第二个 ADC 也有额外的 0xff“无效”字节,但第三个没有。

据我所知,所有三个 ADC 操作之间的唯一区别是前两个以 0xff 开头并有一个额外的“无效”字节,而第三个则没有。我假设这是在形成某种标志以指示是否需要额外的字节。

最佳答案

这不是代码。您正在尝试分解数据。

如果我们重新排列对齐到 4 的字节,我们可以理解它:

411548: 04 00 00 00  ; integer 4
41154C: 61 15 41 00 ; address 0x411561
411550: EC FF FF FF ; integer 0xFFFFFFEC (-20)
411554: 04 00 00 00 ; integer 4
411558: 5C 15 41 00 ; address 0x41155C
41155C: 74 65 73 74 ; string 'test'

关于c - x86 ADC 进位标志和长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18846483/

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