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

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

Восстановить пароль Регистрация
 
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
01.04.2013, 00:06     Адрес функции #1
Здравствуйте.
Имеется программа с одной функцией. При любом изменении кода и повторной компиляции изменяется адрес этой функции.
Можно ли сделать так, чтобы он не изменялся?

Если нельзя, то следующий вопрос...
Вот эта программа:
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 раза.

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

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

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

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

Добавлено через 3 минуты
Если тебе так кажен адрес функции, открой свой бинарь, да в любом hex-редакторе, да поменяй значения, которые в буфер записываешь.
А менять адрес, или нет - up to компилятор.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 20:53     Адрес функции
Еще ссылки по теме:

C++ IP адрес
C++ Не получается адрес динамического двумерного массива передать, как аргумент функции
Как узнать адрес функции Winexec C++

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

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

int I=0;
I=&hack или I=*hack дают не то, что нужно...
Миниатюры
Адрес функции  
Yandex
Объявления
02.04.2013, 20:53     Адрес функции
Ответ Создать тему
Опции темы

Текущее время: 11:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru