Oops和objdump中的Linux内核函数长度(反汇编)

问题描述 投票:0回答:1

我有一些内核Oops在这里失败:

BUG: ...
IP: [<ffffffffabcdefab>] myfunction+0x10/0x1e [mymodule]

在糟糕中,我们可以看到函数长度为30字节(十进制)。我想length是字节数从第一条指令的第一字节到最后一条指令的第一字节。即从第一条指令的地址到最后一条指令的地址分散。我说的对吗?

那么如何确保myfunction的长度为30个字节,查看objdump输出?只需从最后一条地址中减去第一条指令的地址

F.e。:

0000000000068930 <myfunction>:
   68930: 53                       push   %rbx   
   68931: 48 8b 07                 mov    (%rdi),%rax
   68934: 48 89 fb                 mov    %rdi,%rbx
   68937: ff 10                    callq  *(%rax)
   68939: 80 7b 08 00              cmpb   $0x0,0x8(%rbx)
   6893d: 75 09                    jne    68948 <foo1+0x20>
   6893f: 5b                       pop    %rbx   
   68940: c3                       retq
   68941: 0f 1f 80 00 00 00 00     nopl   0x0(%rax)
   68948: 48 89 df                 mov    %rbx,%rdi
   6894b: 5b                       pop    %rbx   
   6894c: eb a2                    jmp    688f0 <foo2>
   6894e: 66 90                    xchg   %ax,%ax

我们能否根据myfunction

的输出来判断0x6894e的长度为0x68930-1e = objdump(十进制的30个字节)?如果不是,那么在反汇编方面功能的长度是多少?

我有一些内核Oops在这里失败:BUG:... IP:[] myfunction + 0x10 / 0x1e [mymodule]在Oops中,我们可以看到函数长度为30字节(十进制)。我认为...

linux assembly linux-kernel disassembly objdump
1个回答
0
投票

它实际上应该是从第一条指令的开始到最后一条指令的结束(包括两端)的字节数。这等效于获取最后一条指令的字节after

© www.soinside.com 2019 - 2024. All rights reserved.