Как я могу изучить изображение процесса?

Сначала я нахожу pid процесса.

      % ps -a | grep 'a.out'

выход:

      36296 pts/0    00:00:07 a.out

Затем я получаю изображение этого процесса с помощью gcore.

      % sudo gcore 36296

выход:

      0x0000558eab27d131 in main ()
warning: Memory read failed for corefile section, 4096 bytes at 0xffffffffff600000.
Saved corefile core.36296
[Inferior 1 (process 36296) detached]

Затем объект шестнадцатеричного дампа

      % hd core.36296 | grep 'HOME'

выход:

      001f4a90  3d 32 00 48 4f 4d 45 3d  2f 68 6f 6d 65 2f 63 61  |=2.HOME=/home/ca|

Теперь я пытаюсь найти раздел, в котором загружаются переменные среды. Как я могу это сделать ?

1 ответ

Вам следует использовать отладчик!

Для linux, gcc и gdb вы можете:

      > gdb <executable> <core-file>

Теперь внутри gdb вы можете исследовать окружение из основного файла:

       (gdb) print ((char**)__environ)[0]
$1 = 0x7ffc6aba0a58 "SHELL=/bin/bash"
(gdb) print ((char**)__environ)[1]
$2 = 0x7ffc6aba0a68 "SESSION_MANAGER=local/unix:@/tmp/.ICE-unix/1873,unix/unix:/tmp/.ICE-unix/1873"

если вы не получите строку с длиной 0.

Если у вас нет исполняемого файла с отладочной информацией, вы также можете попытаться найти текст с помощью:

strings –a <core-file>

Но прежде чем вы напишете основной файл и попытаетесь выполнить в нем поиск, вы просто можете получить среду из процесса, используя ps если ваша программа все еще работает:

ps eww <pid>

Другие вопросы по тегам