Я хочу сделать статистику доступа к байтам памяти в программах, запущенных на Linux
(X86_64
). Я использую perf
инструмент для дампа файла, как это:Могу ли я получить информацию о доступе к памяти с помощью машинного кода X86_64?
: ffffffff81484700 <load2+0x484700>:
2.86 : ffffffff8148473b: 41 8b 57 04 mov 0x4(%r15),%edx
5.71 : ffffffff81484800: 65 8b 3c 25 1c b0 00 mov %gs:0xb01c,%edi
22.86 : ffffffff814848a0: 42 8b b4 39 80 00 00 mov 0x80(%rcx,%r15,1),%esi
25.71 : ffffffff814848d8: 42 8b b4 39 80 00 00 mov 0x80(%rcx,%r15,1),%esi
2.86 : ffffffff81484947: 80 bb b0 00 00 00 00 cmpb $0x0,0xb0(%rbx)
2.86 : ffffffff81484954: 83 bb 88 03 00 00 01 cmpl $0x1,0x388(%rbx)
5.71 : ffffffff81484978: 80 79 40 00 cmpb $0x0,0x40(%rcx)
2.86 : ffffffff8148497e: 48 8b 7c 24 08 mov 0x8(%rsp),%rdi
5.71 : ffffffff8148499b: 8b 71 34 mov 0x34(%rcx),%esi
5.71 : ffffffff814849a4: 0f af 34 24 imul (%rsp),%esi
Мой текущий метод анализа файла и получить все инструкции доступа к памяти, такие как move
, cmp
и т.д. Затем вычислите каждые доступа байт каждой команды, такие как mov 0x4(%r15),%edx
добавит 4
байт.
Я хочу знать, есть ли способ рассчитать через machine code
, например, анализируя «41 8b 57 04
», я также могу добавить 4
байт. Потому что я не знаком с X86_64
машинным кодом, может ли кто-нибудь дать какие-либо подсказки? Или есть лучший способ сделать статистику? Заранее спасибо!
Звучит как работа для Valgrind. –
@SevaAlekseyev: Не могли бы вы предоставить подробную информацию? Благодаря! –
Ваши требования не ясны. Вы хотите знать, что выбрало распределение байтовых значений (вы знаете, что машина часто извлекает значения других размеров)? Распределение адресов, используемых текущей программой? ... адресов, найденных в объектном коде, игнорируя выполнение? FWIW, можно использовать «машинный код», чтобы разрывать отдельные машинные инструкции, так же, как вы можете использовать C, чтобы сделать то же самое (код C фактически скомпилирован в машинный код, и, таким образом, программа C для этого неявно предоставляет машину программа для этого). Предоставьте больше объяснений и еще несколько примеров. –