Подтвердить что ты не робот

Как распечатать память в 0xb0987654 с помощью lldb?

Я использую LLDB, мне интересно, как распечатать значение в памяти 0xb0987654?

4b9b3361

Ответ 1

Xcode имеет очень приятное окно Диспетчер памяти, которое очень хорошо отображает содержимое адресов памяти. Он также позволяет вам контролировать группировку байтов и количество отображаемых байтов и перемещать назад или вперед страницу памяти:

enter image description here

Вы можете получить доступ к нему, нажав ⌘⇧M

или

Отладка → Отладка рабочего процесса → Просмотр памяти

Обратите внимание на поле в нижнем левом углу, где вы можете вставить адрес памяти, который вы хотите проверить!

Документация здесь: https://developer.apple.com/library/ios/recipes/xcode_help-debugger/articles/viewing_memory.html

Связанный ответ здесь: Как открыть браузер памяти в Xcode 4?

Ответ 2

В дополнение к Майклу ответ.

Я обычно использую:

memory read -s1 -fu -c10000 0xb0987654 --force

Это будет напечатано в отладчике.

  • -s для группировки байтов, поэтому используйте 1 для uint8, например, и 4 для int
  • -f для формата. Я по сути забываю правильный символ. Просто поставьте оператор с -f, и он будет привязываться к вам и предоставит вам список всех параметров
  • -c для подсчета байтов
  • если вы печатаете более 1024 байт, добавьте с помощью --force

Надеюсь, что это поможет.

Ответ 3

"me" - это команда, которую вы ищете.

Например, эта команда lldb:

me -r -o /tmp/mem.txt -c512 0xb0987654

скопирует 512 байт из вашего адреса памяти в файл на/tmp/mem.txt.

Ответ 4

Вот простой трюк для отображения типизированных массивов фиксированной длины в lldb. Если ваша программа содержит длинную * переменную, которая указывает на 9 элементов, вы можете объявить тип структуры, содержащий фиксированный массив из 9 длинных значений и наведя указатель на этот тип:

long *values = new long[9]{...};

(lldb) expr typedef struct { long values[9]; } l9; *(l9 *)values
(l9) $1 = {
  values = {
    [0] = 0
    [1] = 1
    [2] = 4
    [3] = 9
    [4] = 16
    [5] = 25
    [6] = 36
    [7] = 49
    [8] = 64
  }
}

Я использую typedef, когда я кодирую в C, это не нужно в С++.