Проблема получения данных по указателию из памяти.

Тема в разделе "LANGS.C", создана пользователем MrNeo, 31 май 2009.

  1. MrNeo

    MrNeo New Member

    Публикаций:
    0
    Регистрация:
    30 май 2009
    Сообщения:
    7
    Есть определенная программа. мне нужно в определенный момент проверять ее некоторые участки памяти.

    вот не большой пример
    Код (Text):
    1. PVOID  addr = GetProcAddress(_hDll,   "AnyFunc");
    2. ...
    3. DWORD val =  *(PDWORD)addr;    // addr точно не NULL иначе бы тут не были.
    так вот иногда val = 0 и не соответствует тому что находится по адресу;

    Помогите найти причину происходящего.
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    а что в окошке дизасма видно?
     
  3. SmanxX1

    SmanxX1 Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    139
    -
    Код (Text):
    1. DWORD val =reinterpret_cast<DWORD>(addr)
     
  4. prorok

    prorok New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    25
    хз, мб:
    DWORD val = *((PDWORD)addr);
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Как ты это выяснил?
     
  6. prorok

    prorok New Member

    Публикаций:
    0
    Регистрация:
    25 янв 2009
    Сообщения:
    25
    )))

    попробуй не так:

    Код (Text):
    1. PVOID  addr = GetProcAddress(_hDll,   "AnyFunc");
    2. ...
    3. DWORD val =  *(PDWORD)addr;    // addr точно не NULL иначе бы тут не были.
    а вот так

    Код (Text):
    1. PVOID  addr = GetProcAddress(_hDll,   "AnyFunc");
    2. DWORD val =  *(PDWORD)addr;    // addr точно не NULL иначе бы тут не были.
    3. ...
     
  7. MrNeo

    MrNeo New Member

    Публикаций:
    0
    Регистрация:
    30 май 2009
    Сообщения:
    7
    а разница ?
    старый и новый способ каста. ))
     
  8. MrNeo

    MrNeo New Member

    Публикаций:
    0
    Регистрация:
    30 май 2009
    Сообщения:
    7
    это Кусок моей длл, которая контролирует сохранность функций в памяти (от хуков)
    так вот у 90% пользователей все норм. а других бывают проблемы. в каких ОС тоже не известно так как спектр ОС у пользователь от w2k - Vista.
    Узнал так как мне пришли данные данных дампа = 0 воссоздать данную ситуацию у себя не получилось у меня на компе всегда все норм считывается.

    Может какие то проги, ОС или еще что то мешают?. Хотя пропатчить они себя дают и моя длл успешно ставить свои хуки.
     
  9. DEADHUNT

    DEADHUNT New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2009
    Сообщения:
    34
    первый правильный, второй нет :lol:
    правильно так:
    DWORD val = *reinterpret_cast<DWORD *>(addr)