Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
#1

Адрес функции - C++

01.04.2013, 00:06. Просмотров 423. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Имеется программа с одной функцией. При любом изменении кода и повторной компиляции изменяется адрес этой функции.
Можно ли сделать так, чтобы он не изменялся?

Если нельзя, то следующий вопрос...
Вот эта программа:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void vulnerable(char* p, int n) {
  char buf[10];
  memcpy(buf, p, n);
};
 
void hack() {
  printf("hack\n");
};
 
int main() {
  char realbuf[1024];
// Кладем адрес функции hack в необходимые ячейки
  realbuf[20]=64;
  realbuf[21]=180;
  realbuf[22]=21;
  realbuf[23]=01;
  vulnerable(realbuf, sizeof(realbuf));
  return 0;
}
Необходимо реализовать передачу управления функции hack, используя переполнение буфера.
Также известно, что для этого необходимо положить адрес функции hack в realbuf в обратном порядке, начиная с 20 позиции.

Например &hack = 0x0115b440
4016 = 6410
B416 = 18010
1516 = 2110
0116 = 0110
Таким образом получаем то, что написано в коде программы.

НО! Адрес функции hack постоянно меняется. Следовательно, необходимо выполнить int i=&hack, а затем реализовать "отщипывание" 2-х последних шестнадцатеричных цифр, перевод в 10-систему и запись результата в соответствующую ячейку. И так 4 раза.

Всю голову сломал над этой задачей, начиная с шестнадцатеричного деления...

Помогите идеей, пожалуйста.
Надеюсь, все не так сложно, как я себе представляю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2013, 00:06
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Адрес функции (C++):

Функция возвращает адрес , как передать этот адрес другой функции ? - C++
const int max = 5; double * fill_array(double, int); void show_array(const double, double *); // как передать этой функции в...

Адрес функции - C++
Как узнать адрес функции? Посмотрел дизассемблер IDA. Очень удобная программа, но не могу разобраться, как получить адрес. Там вызов...

Адрес функции - C++
Доброго времени суток Допустим, хочу узнать адрес функции void fnc(){} int main() { cout&lt;&lt;&amp;fnc&lt;&lt;endl; }

Получение прототипа функции имея ее адрес - C++
здравствуйте!, писать, и разбираться в программировании на C++ только начал, поэтому если вопрос покажется глупым, не обессудьте) ...

Как узнать адрес функции Winexec - C++
Пробовал через IDA, вроде нашел, но не сработал Через Ollydbg не могу найти

Вернуть адрес виртуальной функции с помощью __asm вставки - C++
Есть: class two{ public: }; class one{

6
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 00:09 #2
Цитата Сообщение от jen941 Посмотреть сообщение
При любом изменении кода и повторной компиляции изменяется адрес этой функции.
Цитата Сообщение от jen941 Посмотреть сообщение
передачу управления функции hack, используя переполнение буфера.
Так ты буфер переполняй (бери данные снаружи), а не код перекомпилируй.
0
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
01.04.2013, 00:19  [ТС] #3
Цитата Сообщение от Vourhey Посмотреть сообщение
бери данные снаружи
А как в этом случае записать в ячейку конкретное числовое значение? Будут же записываться только коды ASCII.

**По заданию массив должен заполняться внутри программы...
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 00:20 #4
Цитата Сообщение от jen941 Посмотреть сообщение
Будут же записываться только коды ASCII.
Передать на вход приложению ты можешь что угодно.
0
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
01.04.2013, 00:25  [ТС] #5
Цитата Сообщение от Vourhey Посмотреть сообщение
Передать на вход приложению ты можешь что угодно.
Спасибо.
А можно ли заполнить realbuf внутри программы? Собственно в этом и состоит задача.
0
Vourhey
Почетный модератор
6482 / 2256 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
01.04.2013, 00:35 #6
Цитата Сообщение от jen941 Посмотреть сообщение
А можно ли заполнить realbuf внутри программы?
Можно, заполняй.

Добавлено через 3 минуты
Если тебе так кажен адрес функции, открой свой бинарь, да в любом hex-редакторе, да поменяй значения, которые в буфер записываешь.
А менять адрес, или нет - up to компилятор.
0
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
02.04.2013, 20:53  [ТС] #7
Такой вопрос: как записать в переменную адрес функции (отмечен на скриншоте)?

int I=0;
I=&hack или I=*hack дают не то, что нужно...
0
Миниатюры
Адрес функции  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 20:53
Привет! Вот еще темы с ответами:

Не получается адрес динамического двумерного массива передать, как аргумент функции - C++
/* Лабораторная работа №3 Во всех вариантах необходимо написать три функции, которые будут вызываться из функции main(). Первая...

Адрес объекта, адрес указателя. Где что находится? - C++
#include &lt;iostream&gt; void Foo(int* val) { std::cout &lt;&lt; val &lt;&lt; &quot; &quot; &lt;&lt; *val &lt;&lt; &quot; &quot; &lt;&lt; &amp;val &lt;&lt; '\n'; } void Bar(int* &amp;val) ...

Убедиться, что адрес первого элемента массива и адрес, хранящийся в указатели на этот массив равны. - C++
Убедиться, что адрес первого элемента массива и адрес, хранящийся в указатели на этот массив - равны.

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции - C++
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть значение, отталкиваясь от первой. Возможно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
02.04.2013, 20:53
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru