Автор Тема: Запись одного байта  (Прочитано 644 раз)

Оффлайн Prographer

  • Прохожий
  • *
  • Сообщений: 89
  • Репутация: +7/-0
  • Говнокодим, грабим, убиваем
    • Просмотр профиля
Запись одного байта
« : Апрель 11, 2016, 12:02:11 pm »
Всем привет. Решил написать функцию
Код: C
  1. unsigned char &hydraulics = *(unsigned char*)0x594611; // 1 byte size
  2.  
  3. int SetHydraulics(lua_State *l) {
  4.         unsigned char val = lua_tonumber(l, 1);
  5.         hydraulics = val;
  6.         return 0;
  7. }
При попытке вызвать созданную функцию, игра вылетает. Подскажите, что не так?

Оффлайн Sektor

  • Администратор
  • Постоялец
  • *****
  • Сообщений: 512
  • Репутация: +33/-0
    • Просмотр профиля
Re: Запись одного байта
« Ответ #1 : Май 06, 2016, 02:32:38 am »
Вы пытались записать в ту область, которая была защищена от записи и чтения. Пробуйте этот код:

Код: Lua
  1. int l_SetHydraulics(lua_State *l) {
  2.         DWORD _old;
  3.         VirtualProtect((LPVOID)0x0594611, 4, PAGE_READWRITE, &_old);
  4.         *(int*)(0x0594611) = lua_tonumber(l, 1);
  5.         VirtualProtect((LPVOID)0x0594611, 4, _old, &_old);
  6.         return 0;
  7. }
  8.