Я пытаюсь прочитать адреса памяти из / proc // maps и использую следующий код
for (ptr = NULL; getline(&ptr, &n, file) > 0;) {
if (ptr[0]== ' ') { continue; }
sscanf(ptr, "%lx-%lx", &r0, &r1);
printf("r0: %lx, r1: %lx\n", r0, r1); }
Предположим, что файл указывает на / proc // maps & ptr - указатель строки. Но когда вы рассматриваете файл карт, он не читает сам файл. Он сбрасывает ноль, он не поднимает нули. Итак рассмотрим:
00110000-00123000 r-xp 00000000 08:01 129925 /lib/i686/cmov/libnsl-2.11.1.so
После запуска моей программы:
r0: 110000, r1: 123000
Как сохранить ведущие нули для вывода что-то вроде этого:
r0: 00110000, r1: 00123000
Редактировать: printf для отладки.
Вот что я делаю с r1 позже
mem = mmap(NULL, 4096, PROT_READ, MAP_PRIVATE, mem_fd, r1)