符号

时间:2018-05-08 12:57:41

标签: c linux docker

[背景]
我有一个64位本机Linux应用程序在容器中运行。该应用程序不响应网络请求,但运行正常(cpu / mem使用,线程状态正常)。我想看看它的位置是什么"。

主机是CentOS衍生产品,容器具有Ubuntu16.04用户空间,启用AFAICT ASLR。容器没有CAP_SYS_PTRACE功能,我也没有设法从主机连接,也没有在容器内部附加gdb ......

[问题]
所以我列出了所有带有ps的IP的线程,并试图在符号表中查找IP:

root@0027991aa9d8:/# ps -e Ho pid,tid,stat,comm,class,eip,wchan
  PID   TID STAT COMMAND         CLS      EIP WCHAN
    1     1 Ssl  xxx             TS  cf5e474d poll_schedule_timeout
    1     9 Ssl  xxx             TS  d0580360 futex_wait_queue_me
    1    12 Ssl  xxx             TS  cf5f0a13 ep_poll

但EIP值与内存映射中的任何内容都不对应:

[root@bucav70-175 sdc]# cat /proc/1/maps 
00400000-00625000 r-xp 00000000 08:02 1197375                            /xxx
7fedcf4e9000-7fedcf6a9000 r-xp 00000000 08:02 3828409                    /lib/x86_64-linux-gnu/libc-2.23.so
7fedcf8b3000-7fedcf9bb000 r-xp 00000000 08:02 3828441                    /lib/x86_64-linux-gnu/libm-2.23.so
...

使用nm -C查看符号表我看到的地址与proc / x / map一致,但与ps的输出无关:

...
00000000005a0230 t zmq::thread_t::setSchedulingParameters(int, int)
00000000005a01d0 t zmq::thread_t::stop()
00000000005a0160 t zmq::thread_t::start(void (*)(void*), void*)
...

那么如何确定哪个符号对应于指令指针?

此外,我偶尔会在dmesg中看到这样的行:

[  +0.000014] traps: xxx-[24878] general protection ip:7f7a40f5b196 sp:7ffd6a9aa220 error:0 in libc-2.23.so[7f7a40f24000+1c0000]

但是这些数字没有任何意义w.r.t. proc / x / maps(上面的dmesg行来自与地图不同的执行)。

请帮我解释这些IP值!
任何有关该主题文档的指针也欢迎!

0 个答案:

没有答案