Как я могу изучить изображение процесса?
Сначала я нахожу 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>