1

В настоящее время я пытаюсь установить программы исправления (обновить код и данные в памяти программы, согласно выпуску патча).Найдите переменные стека/кучи в памяти

Предположим, что мы можем остановить запущенную программу и сделать патч. Если исправление изменяет некоторые значения инициализации или назначения данных, как мы можем знать, где переменные, например, в стеке или куче?


Пример:

Перед патч:

void func() { 
    int a = 1; 
} 

После патча:

void func() { 
    int a = 2; 
} 

Когда заплат, как мы могли бы знать расположение a в стеке (или, возможно, не в стек)?

+0

Я предлагаю вам исправить инструкцию инициализации в этом случае; размещение переменной в стеке не является надежным (зависит от компилятора, а также есть некоторые оптимизации, которые могут затруднить работу). Будет ли это решение приемлемым? –

ответ

1

Если вы не владеете знаниями о том, как работает компилятор, вы можете знать, где эти переменные хранятся или даже как они представлены. Каждый разработчик компилятора делает свои собственные правила для того, как/где хранятся переменные.

Возможно, вы сможете найти конкретную скомпилированную программу, проверив сгенерированный код.

+0

Если мы знаем, как работает один компилятор, как получить их из памяти во время выполнения? Как и судебная экспертиза памяти, нам не обязательно знать априори. – WindChaser

+0

Если вы можете проверить объектный код с разумным отладчиком, вы можете, очевидно, проверить значение переменных с тем же самым отладчиком. Это довольно очевидно. Я предлагаю вам научиться писать ассемблер, а затем научиться использовать отладчик. Тогда это будет очевидно и вам. –

Смежные вопросы