C++ Чтение памяти (WinMobile)

Тема в разделе "WASM.BEGINNERS", создана пользователем Chikanok, 3 мар 2008.

  1. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    Добрый день.
    Помогите пожалуйста.
    Есть функция на C# полностью рабочая, мне надо переписать её на C++.
    Вот она на C#:
    Код (Text):
    1. base.offset = 0x8f1d8e78;
    2. uint KM = SetKMode(1);
    3. uint PP = SetProcPermissions(uint.MaxValue);
    4. byte* ptr = (byte*)base.offset;
    5. int t=0;
    6. for (int i = 0; i < 8; i++)
    7. {
    8.   try
    9.   {
    10.      ushort* ptr1 = (ushort*)(ptr + 0x5e);
    11.      t = ptr1[0];
    12.      ptr1 = (ushort*)(ptr + 0x58);
    13. ...
    Вот этот же блок на C++:
    Код (Text):
    1. UINT offset=0x8f1d8e78;
    2. BOOL u=SetKMode(true);
    3. DWORD p=SetProcPermissions(0xFFFFFFFF);
    4. BYTE* numPtr=(BYTE*)offset;
    5. int t=0;
    6. for(int i=0;i<8;i++){
    7.  
    8.     UpdateWindow(lb);
    9.     try{
    10.         USHORT* numPtr2=(USHORT*)(numPtr+0x5E);
    11.         t=numPtr2[0];             //На этой строке вылетает  <---
    12.         numPtr2=(USHORT*)(numPtr+0x58);
    13. ...
    На указанной строке приложение тихо вылетает,т.е. ни каких сообщений об ошибках и т.д. нет.Блок catch не вызываеься.
    Скажите как это вылечить? Или как подругому это сделать.

    ...адресс указателя взят не с неба и не один десяток раз проверен в C#...

    Приложенние для Windows Mobile 5.
    ---0--0---
    SetKMode(BOOL fMode) - This function allows an application to switch between kernel and user modes.

    fMode - Setting to TRUE enters kernel mode; setting to FALSE enters user mode.
    ---0--0---
    SetProcPermissions(DWORD newperms) -This function sets the internal permissions bitmask for the current thread, thereby enabling access to the address space of another process.

    newperms - Bitmask specifying the new permissions. Use the value 0xFFFFFFFF to set access rights to the whole system; otherwise, use the values returned by GetCurrentPermissions.
    ---0--0---
     
  2. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    он и не обязан вызываться. покажи этот блок кстати. есть ли там ниже всех кетчей catch(...) {} ?

    и еще, почему не делаешь вот так:
    Код (Text):
    1. try{
    2.  for(int i=0;i<8;i++){
    3.     //loop's body
    4.  }
    5. }catch ...
     
  3. Ation

    Ation New Member

    Публикаций:
    0
    Регистрация:
    6 авг 2005
    Сообщения:
    92
    Адрес:
    Zaporozhie
    Попробуй в SetKMode ставить 1 (TRUE), а не true;
    И еще проблема может быть в том, что приложение(или что это у тебя :) ) не подписано. SetProcPermissions - относится а АПИ, которые могут использовать только доверенные приложения, и на WM5 просто не сработает, поэтому и вылетает, т.к. не может обратится к памяти.
     
  4. Chikanok

    Chikanok New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    57
    Всем спасибо.
    Особенно большое спасибо Ation!!!
    Проблема была в подписи.