我有一些内核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:[
它实际上应该是从第一条指令的开始到最后一条指令的结束(包括两端)的字节数。这等效于获取最后一条指令的字节after