Получить абсолютные адреса памяти вместо относительных смещений из hexdump

Эх... наконец-то я использую другие правила вместо pac и попробовал Privoxy и это работает. Вот что я сделал.

  1. Установите Privoxy и слушайте 127.0.0.1:1234.
  2. Получаем gfwlist.txt и конвертируем его в файл действий Privoxy.
  3. В файле действий некоторые url будут отправляться через прокси, а другие подключаться напрямую.

1
26.04.2019, 17:49
2 ответа

Hexdump ничего не знает об адресах (или памяти ). Он просто печатает поток байтов и добавляет к нему префикс с количеством байтов, просмотренных до сих пор. Если его ввод поступает из файла, эти числа, таким образом, соответствуют позиции в файле.

Чтобы выяснить, где эти байты оказываются в памяти после загрузки файла, необходимо просмотреть метаданные в файле. Для файлов ELF это означает заголовки разделов (, а иногда и заголовки программ ).

readelf -S path/to/your/binaryпоказывает что-то вроде этого:

Section Headers:
  [Nr] Name              Type             Address           Offset
       Size              EntSize          Flags  Link  Info  Align
…
  [13].text             PROGBITS         000000000050eac0  0010eac0
       0000000001833275  0000000000000000  AX       0     0     16
…

Здесь значение в разделе «Смещение» — это позиция в файле, где начинается конкретный раздел, а значение в разделе «Адрес» — это соответствующий виртуальный адрес (, где он заканчивается в памяти ). Вам просто нужно добавить разницу между этими двумя числами из hexdump, чтобы получить адреса.

Вы также можете использовать objdump -h path/to/your/binaryдля получения тех же данных:

Sections:
Idx Name          Size      VMA               LMA               File off  Algn
…
 12.text         01833275  000000000050eac0  000000000050eac0  0010eac0  2**4
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
…

Опять же,«File off» — это смещение в файле, а «VMA» — соответствующий виртуальный адрес. Если вам интересно, что такое «LMA», посмотрите здесь .

3
27.01.2020, 23:22

Насколько я понимаю, абсолютные физические адреса хорошо защищены. Но есть способ найти логические адреса. В учебных целях вы можете написать простую программу на языке C, которая содержит бесконечный цикл и работает в фоновом режиме. Во время работы программы вы можете использовать «pmap», утилиту Linux, чтобы обойти виртуальный адрес вашей программы. команда для запуска исполняемого файла в фоновом режиме в Linux zsh:

executable_filename&
pmap -x process_id

0
24.03.2021, 17:39

Теги

Похожие вопросы