Есть ли эквивалент dds на lldb? - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь отладить проблему в OSX, и lldb мешает мне.Я думаю, что моя программа имеет поврежденный стек, и я хотел бы иметь возможность вручную проходить по стеку.

В WinDBG есть команда с именем dds, которую я могу использовать для сброса всех указателей настек (в основном, переход от rsp, переход к старшим адресам) и преобразование всех указателей в символы (и ничего не печатать, если это не соответствует коду), я ищу аналогичную команду на lldb.Я знаю, что могу memory read --format x вручную один за другим, а затем искать их, используя image lookup, но это будет слишком много времени.

1 Ответ

2 голосов
/ 18 июня 2019

Нет встроенной команды для самой прогулки, поэтому вам придется перелистывать память вверх по rsp вручную.

Но вам может пригодиться формат "A" для этой задачи.Это напечатает память в виде списка слов размером с адрес, и для любых значений, которые указывают на TEXT или DATA, будет напечатано имя символа.Нравится:

(lldb) mem read -fA `$rsp - 16 * 8` `$rsp` -fA 
0x7ffeefbff660: 0x0000000000000000
0x7ffeefbff668: 0x00007ffeefbff660
0x7ffeefbff670: 0x0000003002000000
0x7ffeefbff678: 0x00007fff6e2ee568 libsystem_platform.dylib`__platform_sigaction + 103
0x7ffeefbff680: 0x0000000000000000
0x7ffeefbff688: 0x0000000000000000
0x7ffeefbff690: 0x0000000000013dc9
0x7ffeefbff698: 0x0000000000000000
0x7ffeefbff6a0: 0x00007fff6e238fe2 libsystem_kernel.dylib`__sigaction + 10
0x7ffeefbff6a8: 0x0000000000000000
0x7ffeefbff6b0: 0x000000000000001e
0x7ffeefbff6b8: 0x0000000000013dc9
0x7ffeefbff6c0: 0x00007ffeefbff700
0x7ffeefbff6c8: 0x0000000100002020 _dyld_private
0x7ffeefbff6d0: 0x000000000000000e
0x7ffeefbff6d8: 0x0000000100000f45 signals`main + 53 at signals.c:13:3
...