gpt4 book ai didi

java - 无法使用 java 进程的 gdb 核心反汇编 $PC

转载 作者:行者123 更新时间:2023-11-30 05:32:55 25 4
gpt4 key购买 nike

我正在查看一个挂起且不响应任何命令的 java 进程的核心。我对所有线程进行了线程堆栈转储,我看到的是重复的以下模式......

#0  0x00007fc38edbc04f in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
#1 0x00007fc38df34f8b in ?? ()
#2 0x00007fc38800fb00 in ?? ()
#3 0x00007fc38800e800 in ?? ()
#4 0x00007fc38e5c864c in ?? ()
#5 0x00007fc38800c3f0 in ?? ()
#6 0x00007fc38f1df5a0 in ?? ()
#7 0x00007fc38deeaf65 in ?? ()
#8 0x00007fc38f1df5c0 in ?? ()
#9 0x00007fc38800c3f0 in ?? ()
#10 0x00007fc38800e800 in ?? ()
#11 0x00007fc38e5c7f68 in ?? ()
#12 0x00007fc38800e800 in ?? ()
#13 0x00007fc38800f5c0 in ?? ()
#14 0x00007fc38f1df5c0 in ?? ()
#15 0x00007fc38deec5fb in ?? ()
#16 0x00007fc38800e800 in ?? ()
#17 0x000000000000000b in ?? ()
#18 0x00007fc38f1df700 in ?? ()
#19 0x00007fc38dfd66b1 in ?? ()
#20 0x00007fc3455c9af8 in ?? ()
#21 0x00007fc38800e800 in ?? ()
#22 0x00007fc3455c9af8 in ?? ()
#23 0x00007fc300000000 in ?? ()
#24 0x00007fc300000019 in ?? ()
#25 0x0000000000000000 in ?? ()

我尝试执行 info mem 0x00007fc38df34f8b 但没有成功。我也无法反汇编任何这些框架 IP。

我知道在java中,通过JIT,代码是在运行时生成的。不过,我应该能够拆卸它,对吧?当我在 gdb 中加载核心时,它不会提示它被截断。另外,我正确设置了 solib-path 以指向该进程的 jre 库。

另外...我不认为堆栈已损坏。例如,如果我反汇编 pthread_cond_wait 我会看到以下内容,它为本地变量设置空间......

Dump of assembler code for function pthread_cond_wait@@GLIBC_2.3.2:
0x7fc38edbbf90 <pthread_cond_wait@@GLIBC_2.3.2>: lea rsp,[rsp-0x28]
0x7fc38edbbf95 <pthread_cond_wait@@GLIBC_2.3.2+5>: cmp QWORD PTR [rdi+0x20],0xffffffffffffffff

现在查看[rsp+40]

(gdb) print $rsp+40
$12 = (void *) 0x7fc38f1df538
(gdb) x/4ga 0x7fc38f1df538
0x7fc38f1df538: 0x7fc38df34f8b 0x7fc38800fb00
0x7fc38f1df548: 0x7fc38800e800 0x7fc38e5c864c

可以看到[rsp+40] = 0x7fc38df34f8b匹配下一帧的IP地址...

#0  0x00007fc38edbc04f in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/x86_64-linux-gnu/libpthread.so.0
#1 0x00007fc38df34f8b in ?? ()

此外,进一步查看机器,我看到一个 kern.log 文件,其中包含以下内容:

2019-07-23T02:13:10.766604+00:00 orc-del-pre-039 kernel: [18512637.857805] java: Corrupted page table at address 61517f050
2019-07-23T02:13:10.766618+00:00 orc-del-pre-039 kernel: [18512637.859136] PGD 800000037c453067 PUD 20df90067 PMD 343ed4067 PTE 80000002a1e4e867
2019-07-23T02:13:10.766618+00:00 orc-del-pre-039 kernel: [18512637.860977] Bad pagetable: 000f [#1] SMP
2019-07-23T02:13:10.766619+00:00 orc-del-pre-039 kernel: [18512637.861999] Modules linked in: dm_mod tcp_diag inet_diag crc32_pclmul ppdev aesni_intel evdev aes_x86_64 serio_raw lrw gf128mul parport_pc glue_helper ablk_helper pvpanic ena(O) parport cryptd processor button thermal_sys ext4 crc16 mbcache jbd2 crct10dif_pclmul crct10dif_common crc32c_intel nvme
2019-07-23T02:13:10.766620+00:00 orc-del-pre-039 kernel: [18512637.868712] CPU: 5 PID: 11213 Comm: java Tainted: G O 3.16.0-7-amd64 #1 Debian 3.16.59-1

所以我怀疑有什么东西损坏了 PTE,这就是为什么这些地址无法解析?

任何帮助表示赞赏。我试图找出进程挂起的原因。

最佳答案

I should be able to disassemble it, right?

如果您使用的是 disas 0x00007fc38df34f8b,那么不行:GDB 不知道从哪里开始和结束反汇编。

可以查看说明:使用如下内容:

x/40i 0x00007fc38df34f8b-35

但这不太可能有很大帮助。

已经有set of patches使混合语言调试能够与 Java 一起使用,但我不确定这些补丁是否成功了。

更新:

x/40i 0x00007fc38df34f8b-40
0x7fc38df34f63: Cannot access memory at address 0x7fc38df34f63

这意味着 pthread_cond_wait 没有正确的展开描述符,并且 where 的其余输出是伪造的。

关于java - 无法使用 java 进程的 gdb 核心反汇编 $PC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188604/

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