На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual C++ / MFC / WTL (далее Раздела)
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Полезные ссылки:
user posted image FAQ Раздела user posted image Обновления для FAQ Раздела user posted image Поиск по Разделу user posted image MSDN Library Online
Модераторы: ElcnU
  
> Переменные , Переменные
    Есть три типа переменных
    первая глобальная объявлена в файлах stdafx : mEP
    вторая в классе class CMainFrame : public CFrameWnd : b
    третья стековая : DWORD64 a;
    и все три не работают
    ExpandedWrap disabled
      LRESULT CMainFrame::OnCreateProcess(WPARAM wParam, LPARAM lParam)
      {
          base=de.u.CreateProcessInfo.lpBaseOfImage;
          threadlocalbase=de.u.CreateProcessInfo.lpThreadLocalBase;
          start=de.u.CreateProcessInfo.lpStartAddress;
          ResumeThread(hThread);
          m_Buff.AppendFormat(_T("Создан процесс \r\nПроцесс загружен по базе: %x \r\n"), base);
          m_Buff.AppendFormat(_T("PEB процесса: %x \r\n"),threadlocalbase);
          DWORD64 a=*(DWORD64*)base;
          b=*(DWORD64*)base;
          mEP=*(DWORD64*)base;
          m_Buff.AppendFormat(_T("EP:    %x \r\n"),base);
          MyEdit->SetWindowTextW(m_Buff);
          return (LRESULT) 0;
      }


    в дизассемблере видно
    ExpandedWrap disabled
      000000013FFD2C8F  call        ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::AppendFormat (13FFD1122h)
          DWORD64 a=*(DWORD64*)base;
          b=*(DWORD64*)base;
      000000013FFD2C94  mov         r11,qword ptr [base (1401E8E20h)]
          mEP=*(DWORD64*)base;
          m_Buff.AppendFormat(_T("EP:    %x \r\n"),base);
      000000013FFD2C9B  lea         rdx,[string L"EP:    %x \r\n" (1401854F8h)]

    из трех переменных только во второй регистру r11 присваивается значение, но и оно потом теряется.
    base имеет тип LPVOID? Остальное работает нормально, результат выводится
    Подскажите что делаю не так ?
      a и b не используются, потому на них можно забить. Потеря регистра r11 из асм-кода не видна.
        Хорошо, поменял код, теперь b используется, но результат по прежнему нулевой


        ExpandedWrap disabled
          LRESULT CMainFrame::OnCreateProcess(WPARAM wParam, LPARAM lParam)
          {
              base=de.u.CreateProcessInfo.lpBaseOfImage;
              threadlocalbase=de.u.CreateProcessInfo.lpThreadLocalBase;
              start=de.u.CreateProcessInfo.lpStartAddress;
              ResumeThread(hThread);
              m_Buff.AppendFormat(_T("Создан процесс \r\nПроцесс загружен по базе: %x \r\n"), base);
              m_Buff.AppendFormat(_T("PEB процесса: %x \r\n"),threadlocalbase);
              DWORD64 a=*(DWORD64*)base;
              b=*(DWORD64*)base;
              mEP=*(DWORD64*)base;
              m_Buff.AppendFormat(_T("EP:    %x \r\n"), b);
              MyEdit->SetWindowTextW(m_Buff);
              return (LRESULT) 0;
          }


        теперь видно как результат rax затирается дальше ?
        ExpandedWrap disabled
          000000013FDA761F  call        ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::AppendFormat (013FD6B285h)  
              DWORD64 a=*(DWORD64*)base;
              b=*(DWORD64*)base;
          000000013FDA7624  mov         rax,qword ptr [base (01407C1B68h)]  <----------------------
              mEP=*(DWORD64*)base;
              m_Buff.AppendFormat(_T("EP:    %x \r\n"), b);
          000000013FDA762B  lea         rcx,[m_Buff (01407C1B90h)]  
          000000013FDA7632  mov         rdx,qword ptr [rax]  
          000000013FDA7635  mov         qword ptr [rbx+1D8h],rdx  
          000000013FDA763C  mov         rax,qword ptr [base (01407C1B68h)]  <----------------------
          000000013FDA7643  mov         rdx,qword ptr [rax]  
          000000013FDA7646  mov         qword ptr [mEP (01407C1A90h)],rdx  
          000000013FDA764D  lea         rdx,[string L"EP:    %x \r\n" (0140536818h)]  
          000000013FDA7654  mov         r8,qword ptr [rbx+1D8h]  
          000000013FDA765B  call        ATL::CStringT<wchar_t,StrTraitMFC<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::AppendFormat (013FD6B285h)  
              MyEdit->SetWindowTextW(m_Buff);
        Сообщение отредактировано: GetProcAddress -
          Цитата GetProcAddress @
          Хорошо, поменял код, теперь b используется, но результат по прежнему нулевой

          Ты пытаешься по ассемблерному листингу программы понять,
          как работает оптимизация компилятора.
          Не всегда сразу очевидно, что компилятор сделал и почему.
          Попробуй отключить всю оптимизацию и посмотри, что получилось.
            Цитата GetProcAddress @
            теперь видно как результат rax затирается дальше ?
            Логично, что он затирается! :
            1.база записывается в него (rax);
            2.четверное слово читается из rax (как и положено) в rdx;
            3.из rdx данные пишутся в 'b' (mov qword ptr [rbx+1D8h],rdx) и в 'mEP' (mov qword ptr [mEP (01407C1A90h)],rdx).

            Добавлено
            Цитата Славян @
            читается из rax (как и положено) в rdx;
            Имеется ввиду, что читается в rdx из ячейки по адресу rax. rdx = *rax;
              Спасибо ответ помог.Понять,как работает оптимизация в мою задачу не входило, просто в настройках проекта оказалась включена опция подставляемых функций, которая и давала этот эффект, отключил и все заработало.
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0288 ]   [ 16 queries used ]   [ Generated: 29.03.24, 00:34 GMT ]