gpt4 book ai didi

linux - Linux 内核中 UD2 操作码的用途是什么?

转载 作者:IT王子 更新时间:2023-10-29 00:16:04 33 4
gpt4 key购买 nike

我在启动阶段的某个地方发现了 Linux 内核中的以下片段(虽然不是相应的 C 代码)。您可以清楚地看到 0F 0B 部分,代表 UD2操作码(IDA拒绝反汇编)。

解释了此操作码的一些可能用法 herehere .然而,在这种情况下,这条指令之后的操作码实际上没有意义。

seg000:000C059E                 test    edx, edx
seg000:000C05A0 jnz short loc_C05AA
seg000:000C05A0 ; --------------------------------------------------
seg000:000C05A2 db 0Fh
seg000:000C05A3 db 0Bh
seg000:000C05A4 db 73h
seg000:000C05A5 db 0
seg000:000C05A6 db 86h ; å
seg000:000C05A7 db 4Ah ; J
seg000:000C05A8 db 27h ; '
seg000:000C05A9 db 0C0h ; +
seg000:000C05AA ; --------------------------------------------------
seg000:000C05AA
seg000:000C05AA loc_C05AA:
seg000:000C05AA cmp eax, [edi+4]
seg000:000C05AD jbe short loc_C05B7
seg000:000C05AD ; --------------------------------------------------
seg000:000C05AF db 0Fh
seg000:000C05B0 db 0Bh
seg000:000C05B1 db 75h
seg000:000C05B2 db 0
seg000:000C05B3 db 86h
seg000:000C05B4 db 4Ah ; J
seg000:000C05B5 db 27h ; '
seg000:000C05B6 db 0C0h ; +
seg000:000C05B7 ; --------------------------------------------------
seg000:000C05B7
seg000:000C05B7 loc_C05B7:
seg000:000C05B7 add ecx, 0FFFh
seg000:000C05BD shr esi, 0Ch
seg000:000C05C0 shr ecx, 0Ch
seg000:000C05C3 sub ecx, esi
seg000:000C05C5 cmp ecx, ebx
seg000:000C05C7 jnb short loc_C05E9
seg000:000C05C9 lea esi, [esi+0]
seg000:000C05D0
seg000:000C05D0 loc_C05D0:
seg000:000C05D0 mov edx, [edi+8]
seg000:000C05D3 btr [edx], ecx
seg000:000C05D6 sbb eax, eax
seg000:000C05D8 test eax, eax
seg000:000C05DA jnz short loc_C05E4
seg000:000C05DA ; ------------------------------------------------
seg000:000C05DC db 0Fh
seg000:000C05DD db 0Bh
seg000:000C05DE db 7Fh
seg000:000C05DF db 0
seg000:000C05E0 db 86h ; å
seg000:000C05E1 db 4Ah ; J
seg000:000C05E2 db 27h ; '
seg000:000C05E3 db 0C0h ; +
seg000:000C05E4 ; -------------------------------------------------
seg000:000C05E4
seg000:000C05E4 loc_C05E4:
seg000:000C05E4 inc ecx

最佳答案

这是来自 include/asm-i386/bug.h 的 BUG() 宏.

/*
* Tell the user there is some problem.
* The offending file and line are encoded after the "officially
* undefined" opcode for parsing in the trap handler.
*/

#ifdef CONFIG_DEBUG_BUGVERBOSE
#define BUG() \
__asm__ __volatile__( "ud2\n" \
"\t.word %c0\n" \
"\t.long %c1\n" \
: : "i" (__LINE__), "i" (__FILE__))

例如,位于 0C05AF 的文件用于名称为 0xC0274A86 且行号为 117 (0x75) 的文件。

关于linux - Linux 内核中 UD2 操作码的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11140136/

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