Помощь с masm32

Тема в разделе "WASM.X64", создана пользователем nullPtr, 2 янв 2021.

Метки:
  1. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Нужно вставить след асм код в масм32 VS 2019 x64.
    Код (ASM):
    1. mov eax, fs: [0x30]
    2. mov eax, [eax + 0xC]
    3. mov eax, [eax + 0xC]
    4. mov eax, [eax]
    5. mov eax, [eax]
    6. mov eax, [eax + 0x18]
    У меня выходит то invalid use of register или missing operator in expression
    асм забыл давно
    с первой строчкой mov eax, fs [30h] - помогло, но какого хрена с последней не помогает?
     
    Последнее редактирование модератором: 3 янв 2021
  2. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Ну ты в курсе, что 64-битный компиль студии не поддерживает асм-вставки? И для 64-битного приложения TEB получать надо через gs, если не путаю. Эту вставку можно заменить интринсикой __readfsdword или как то так.
     
  3. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    ну я в масм портирую Рел, после extern "C" вызываю
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Не понял, откуда куда ты портируешь?
     
  5. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    одним словом. Пытаюсь получить хендл kernel32 для хеш вызова винапи
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
  7. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    под 32 у меня заточен. Нужен под 64.
    То что скинул я должно работать под 64. Там именно такая схема, что получаем хендл кернел32, ищем LoadLibrary и GetProcAdress и все остальные функции вызываем по хешу. Мне нужно написать две проги под 64 и под 32.
    под 32 решил, а вот под 64 нужно так же получить хендл кернеля
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Ну я тебе написал уже в первом сообщенит, что TEB надо получать через gs, а не fs, и само собой смещения будут другие.
     
    nullPtr нравится это.
  9. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.329
    Код (C):
    1. static HMODULE GetKernel32Base (void)
    2. {
    3.     LPBYTE ptr;
    4.  
    5. #ifdef _WIN64
    6.     ptr = (LPBYTE)__readgsqword(0x60);
    7.     ptr = *(LPBYTE*)(ptr + 0x18);
    8.     ptr = *(LPBYTE*)(ptr + 0x20);
    9.     ptr = *(LPBYTE*)(ptr);
    10.     ptr = *(LPBYTE*)(ptr);
    11.     ptr = *(LPBYTE*)(ptr + 0x20);
    12. #else
    13.     ptr = (LPBYTE)__readfsdword(0x30);
    14.     ptr = *(LPBYTE*)(ptr + 0x0C);
    15.     ptr = *(LPBYTE*)(ptr + 0x14);
    16.     ptr = *(LPBYTE*)(ptr);
    17.     ptr = *(LPBYTE*)(ptr);
    18.     ptr = *(LPBYTE*)(ptr + 0x10);
    19. #endif
    20.  
    21.     return (HMODULE)ptr;
    22. }
     
    nullPtr, M0rg0t и Rel нравится это.
  10. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    как оно может работать под х64, если там 32 битный асм. Или что имеется ввиду? WOW64?
    И как ты делаешь, кстати, асм вставка или инклуд асм-файла в студии?

    тоже давно не писал, но как сказали выше, лучше пиши на Си или попробуй добавить dword ptr.
     
  11. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Я асм вставку делал чере инклуд для x64, а для x32 у меня асм вставкой


    А так, благодарность товарищу rmn, воркает