Как заставить strace печатать адреса строковых аргументов, а не только их значения?

Я пытаюсь использовать strace чтобы понять, как бинарная программа использует память.

Тем не менее, по умолчанию вывод strace, в попытке быть более удобным для пользователя, печатает любой char * буферы как соответствующие строки.

read(3, "Tell me, Muse, of that man of ma"..., 4096) = 270

Есть ли способ сказать strace распечатать фактический адрес строки рядом с ее содержимым?

Если невозможно получить и то и другое, то будет также хорошо печатать только адрес строки вместо ее усеченного содержимого.

2 ответа

Решение

Вы можете скачать источникstrace и изменить все это tprintf("%s", ...) в tprintf("%p", ...)и создать локальную копию strace,

-e raw=read должен делать то, что вы уже хотите. Там не должно быть необходимости в модификации источника.

broadway @ creepspread: ~% strace -e raw = читать ls 2>&1|grep ^read
читать (0x3, 0x7fff5ea52e78, 0x340) = 0x340
читать (0x3, 0x7fff5ea52e48, 0x340) = 0x340
читать (0x3, 0x7fff5ea52e18, 0x340) = 0x340
читать (0x3, 0x7fff5ea52de8, 0x340) = 0x340
читать (0x3, 0x7fff5ea52ca8, 0x340) = 0x340
читать (0x3, 0x7fff5ea52c48, 0x340) = 0x340
читать (0x3, 0x7fff5ea52c18, 0x340) = 0x340
читать (0x3, 0x7fef1433f000, 0x400) = 0x136
читать (0x3, 0x7fef1433f000, 0x400) = 0

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