linux 进程崩溃 堆栈,linux – 使用崩溃实用程序在堆栈上查找局部变量

我正在使用崩溃实用程序来anaylze vmcore(linux)结果,但我发现在函数中提取局部变量值有困难.谷歌搜索相同的说,可以使用“信息本地”,但当我使用它,它说命令没有找到.

是否有任何指针用于在vmcore转储中提取局部变量?

解决方法:

如果您正在寻找函数参数,请注意参数1-6通过寄存器(rdi,rsi,..)传递,参数7- ..在堆栈上传递.

所以根据定义,很容易看到参数7-的值 – 只是转储堆栈上下文:

碰撞&GT bt -f

#6 [ffff88107fc23e08] delayed_work_timer_fn at ffffffff8108a060

ffff88107fc23e10: ffff88107fc23e50 **ffffffff8107e329**

#7 [ffff88107fc23e18] call_timer_fn at **ffffffff8107e329**

ffff88107fc23e20: ffff88101dc6d660 ffff881020f44000

ffff88107fc23e30: ffff88101dc6d660 ffff88107fc23e90

ffff88107fc23e40: ffff881020f45020 ffffffff8108a030

ffff88107fc23e50: ffff88107fc23ed0 ffffffff8107e739

请参阅链接.参数7- ..将被推送到返回地址下面的堆栈(这里我们没有这样的参数).

对于通过寄存器传递的参数1-6,您必须反汇编调用函数代码并遵循它们获取值的方式.大多数情况下,您会看到他们从另一个寄存器中获取价值.你试图找到的是在某个时刻从堆栈读取的值.这是一个例子:

0xffffffff8107e723 : sti

0xffffffff8107e724 : nopw 0x0(%rax,%rax,1)

0xffffffff8107e72a : mov -0x48(%rbp),%rdx

0xffffffff8107e72e : mov %r12,%rdi

0xffffffff8107e731 : mov %r15,%rsi

0xffffffff8107e734 : callq 0xffffffff8107e2e0

static void call_timer_fn(struct timer_list *timer, void (*fn)(unsigned long),

unsigned long data)

所以’call_timer_fn’第三个参数(rdx)就是我们在位置rbp [-0x48]的’call_timer_fn’堆栈中所拥有的…

这很棒…

如果不是这种情况,那么你必须继续调用跟踪&汇编(:-()直到你到达寄存器已知的第一个位置:

#14 [ffff88107fc23fb0] apic_timer_interrupt at ffffffff81515e33

--- ---

#15 [ffff881020f75da8] apic_timer_interrupt at ffffffff81515e33

[exception RIP: intel_idle+193]

RIP: ffffffff812bce31 RSP: ffff881020f75e58 RFLAGS: 00000202

RAX: 0000000000000000 RBX: ffff88107fc2e3c0 RCX: 0000000000000000

RDX: 0000000000007cd0 RSI: 0000000000000000 RDI: 0000000001e78df8

RBP: ffff881020f75ea8 R8: 0000000000004183 R9: 000000000000003b

R10: 000000a89c12c7e8 R11: 0000000000000001 R12: ffffffff81515e2e

R13: ffff88107fc2e500 R14: 0000000000000000 R15: ffff88107fc2e3c0

ORIG_RAX: ffffffffffffff10 CS: 0010 SS: 0018

有关本地函数变量,请参阅链接.如果没有优化,它们会被推入堆栈.如果可以,我建议禁用优化.现在你应该能够从堆栈中获取它们.

标签:linux,crash,crash-dumps

来源: https://codeday.me/bug/20190830/1771194.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值