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

адресс начала класса - C++

Восстановить пароль Регистрация
 
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
17.02.2014, 18:15     адресс начала класса #1
есть к примеру класс:

C++
1
2
3
4
5
6
7
class abc
{
public:
func1();
func2();
};
abc ABC;
Хотелось бы посмотреть его расположение в памяти.

Как вывести адрес начала класса или хотя бы любой функции внутри него и возможно ли вообще это сделать , пробнул такими способами:

C++
1
2
3
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , ABC);
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , *(DWORD*)ABC);
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , &ABC);
Выводится бред какой-то...
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
THE--MASTER
Заблокирован
17.02.2014, 18:19     адресс начала класса #2
abc *ABC = new abc;
в дебаггере в окне Memory1 вводишь ABC или копируешь туда адрес, который ты видишь при надеведии на него мышкой. Окно памяти настраиваешь как тебе удобно
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,920
Записей в блоге: 2
Завершенные тесты: 1
17.02.2014, 18:22     адресс начала класса #3
Цитата Сообщение от ВДВ777 Посмотреть сообщение
Хотелось бы посмотреть его расположение в памяти.
никак, класс это лишь описание
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
17.02.2014, 18:30  [ТС]     адресс начала класса #4
Цитата Сообщение от Croessmah Посмотреть сообщение
никак, класс это лишь описание
а функцию внутри класса?
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
17.02.2014, 18:47     адресс начала класса #5
ВДВ777, разберись что такое класс и объект, почитай об указателях а потом выброси всю дурь с головы. А если уже нетерпеж то
C++
1
std::cout << &ABC;
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
17.02.2014, 19:07  [ТС]     адресс начала класса #6
Цитата Сообщение от coloc Посмотреть сообщение
ВДВ777, разберись что такое класс и объект, почитай об указателях а потом выброси всю дурь с головы. А если уже нетерпеж то
C++
1
std::cout << &ABC;
C++
1
2
3
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , ABC);
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , *(DWORD*)ABC);
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , &ABC);
эти примеры я просто так выложил??? Я уже это пробнул и не раз
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
17.02.2014, 19:10     адресс начала класса #7
Цитата Сообщение от ВДВ777 Посмотреть сообщение
эти примеры я просто так выложил??? Я уже это пробнул и не раз
Чем конкретно не устраивает предложенный вывод? Не пойми меня не правильно, просто мне не очень ясно что значит "бред".
coloc
погромист
 Аватар для coloc
409 / 245 / 15
Регистрация: 27.08.2012
Сообщений: 550
Завершенные тесты: 1
17.02.2014, 19:19     адресс начала класса #8
ВДВ777, а ты че думал адрес выведется типу ,,ул. Пушкина 19/А,,?
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
17.02.2014, 19:21  [ТС]     адресс начала класса #9
Цитата Сообщение от DrOffset Посмотреть сообщение
Чем конкретно не устраивает предложенный вывод? Не пойми меня не правильно, просто мне не очень ясно что значит "бред".
разные адреса выводит каждый раз - то есть 3 примера которые я привел выше - выводят 3 разных адреса , мало того эти адреса не каким боком не относятся к моей программе , выходят за рамки выделенной памяти для проги и её модулей , короче левые адреса

Добавлено через 1 минуту
Цитата Сообщение от coloc Посмотреть сообщение
ВДВ777, а ты че думал адрес выведется типу ,,ул. Пушкина 19/А,,?
вот я и создал данную тему , чтобы мне разъяснили как найти адрес начала класса
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
17.02.2014, 19:26     адресс начала класса #10
Цитата Сообщение от ВДВ777 Посмотреть сообщение
разные адреса выводит каждый раз - то есть 3 примера которые я привел выше - выводят 3 разных адреса , мало того эти адреса не каким боком не относятся к моей программе , выходят за рамки выделенной памяти для проги и её модулей , короче левые адреса
Ну там в двух случаях вообще не адреса выводятся.
C++
1
2
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , ABC); // это не адрес
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , *(DWORD*)ABC); // и это не адрес
Адрес выводится только тут:
C++
1
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , &ABC);
Теперь осталось выяснить каким образом ты определил что "адреса не каким боком не относятся к моей программе"?
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
17.02.2014, 19:41  [ТС]     адресс начала класса #11
Цитата Сообщение от DrOffset Посмотреть сообщение
Ну там в двух случаях вообще не адреса выводятся.
C++
1
2
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , ABC); // это не адрес
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , *(DWORD*)ABC); // и это не адрес
Адрес выводится только тут:
C++
1
PrintText2(5 , 500 , SKYBLUE, pFont , "%X" , &ABC);
Теперь осталось выяснить каким образом ты определил что "адреса не каким боком не относятся к моей программе"?
взял обычный редактор памяти "cheat engine" и просмотрел диапазон памяти программы , dma точно нет , так как не использовал виртуальные функции (да и те адреса которые выводятся находятся почти в самом конце оперативной памяти) , только статические адреса , найти конец и начало модуля не сложно , как минимум вручную глянуть или как максимум так:

C++
1
2
3
4
5
6
7
8
9
MODULEINFO GetModuleData (char* module_name)
{
    MODULEINFO moduleInf = {0};
    HMODULE hModule = GetModuleHandle (module_name);
    if (hModule == NULL)
    return moduleInf;
    GetModuleInformation(GetCurrentProcess(), hModule , &moduleInf ,sizeof(MODULEINFO) );
    return moduleInf;
}
DrOffset
6461 / 3835 / 886
Регистрация: 30.01.2014
Сообщений: 6,630
17.02.2014, 20:04     адресс начала класса #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от ВДВ777 Посмотреть сообщение
взял обычный редактор памяти "cheat engine"
Чисто ради интереса сейчас попробовал эту программу и прекрасно нашел свой адрес выведенный через:
C++
1
2
A a;
printf("%x\n", &a);
Что-то ты не так делаешь
А вообще советую почитать книжки на тему организации памяти в windows. Ну или для начала здесь.
Ну а адреса в своей программе все-таки лучше смотреть отладчиком.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 20:08     адресс начала класса
Еще ссылки по теме:

C++ Программа, которая выводит на карте адресс человека
C++ С начала суток часовая стрелка повернулась на "y" градусов. Сколько часов и минут прошло с начала суток?
Как получить доступ к методам класса, который содержится в векторе класса C++

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

Или воспользуйтесь поиском по форуму:
ВДВ777
-4 / 0 / 0
Регистрация: 12.03.2013
Сообщений: 110
17.02.2014, 20:08  [ТС]     адресс начала класса #13
Цитата Сообщение от DrOffset Посмотреть сообщение
Чисто ради интереса сейчас попробовал эту программу и прекрасно нашел свой адрес выведенный через:
C++
1
2
A a;
printf("%x\n", &a);
Что-то ты не так делаешь
А вообще советую почитать книжки на тему организации памяти в windows. Ну или для начала здесь.
Ну а адреса в своей программе все-таки лучше смотреть отладчиком.
да, спс, способ верный у меня тоже получилось все , просто нужно было "call" вписать подкласса , только так отображается верный адресс , тему можно закрыть
Yandex
Объявления
17.02.2014, 20:08     адресс начала класса
Ответ Создать тему
Опции темы

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