C ptrace точки останова - PullRequest
1 голос
/ 30 апреля 2020

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

#include<stdio.h>

int main()
{
    printf("BEFORE");

    printf("AFTER"); 
}

, а разборка основной функции выглядит следующим образом: enter image description here

, но если я пытаюсь использовать код ниже для печати данных в 0x64a, я получаю вывод ffffffffffffffff

long address = 0x64a;
long data = ptrace(PTRACE_PEEKTEXT, status, (void *) address, NULL);
printf("%lx", data);

Кроме того, это код, к которому я прикрепляю тестовую программу:

char* args[] = {"test", NULL};
if(pid == 0)
{
    ptrace(PTRACE_TRACEME, 0, NULL, NULL);
    execve("./test", args, NULL);
    //execl("./test", "test", NULL);
}

1 Ответ

2 голосов
/ 01 мая 2020

У вас есть независимый от позиции исполняемый файл. Таким образом, ASLR запускает произвольный адрес в памяти. Проверьте регистр rip во время ptrace и извлеките код оттуда, а не из адреса в вашем исполняемом файле.

...