Задать вопрос

Как вскрыть exe файл и получить адрес области хранения всех переменных?

Здравствуйте, уважаемые дамы и господа, какой час уже сижу, но не могу понять и разобраться.
Хочу открыть exe файл и найти место, где хранятся все числовые константы объявленных переменных.
Например, имеется код
#include <iostream>
#include <conio.h>
using namespace std;
void main(){

	int g = 1998;
	int b = 2000;
	int l = 5;
	_getch();
}

Скомпилировал, создался exe файл, после открываем его.
Хочу узнать, каким образом мне получить место( адрес) с которого начинают храниться все числовые константы переменных в ехе файле, и по какое.
Читал сие статьи :
cs.usu.edu.ru/docs/pe
www.xakep.ru/magazine/xs/057/026/1.asp

Гуглил, пытался понять, но данная тема для меня просто лес. Как понимаю, нужно с определённых точек сначала прочесть информацию в объявленные структуры, а после вытащить адрес.

Буду благодарен за подсказки, если покажете код на примере, как всё это сделать, будет здорово.
  • Вопрос задан
  • 3723 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
svd71
@svd71
На примере не покажу, ибо давно это было. Но помню такой фокус: перечисляй все секции файла. Каждая переменная ( я не имею ввиду локальные переменные какой-либо функции) хранится в отдельной секции. Тоже самое относится и к функциям.
А связа но это дело с линковкой и оптимизацией. Так линкер может находить неиспользуемые в программе переменные и функции( на те секции, куда никто не ссылается) и просто не линковать их в файл.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А почему Вы уверены, что константы где-то хранятся? Скомпилируйте через ассемблер и посмотрите. Скажем C++ Builder генерирует такой код:
@_main	proc	near
	push      ebp
	mov       ebp,esp
	add       esp,-12
	mov       dword ptr [ebp-4],1998
	mov       dword ptr [ebp-8],2000
	mov       dword ptr [ebp-12],5
	call      @__getch
	mov       esp,ebp
	pop       ebp
	ret 
@_main	endp

То есть все константы находятся непосредственно в коде.
Ответ написан
@mrbaranovskiy2
Мне кажется, проще взять ollydbg и продебажить твою программку. Более полную информацию будет трудно самому получить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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