RegSetValueEx

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 10 авг 2010.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%\win32ax.inc'
    2. section '.code' executable
    3. start:
    4.         invoke RegCreateKeyEx,\
    5.                HKEY_LOCAL_MACHINE,'Software\$$*',\
    6.                NULL,NULL,REG_OPTION_NON_VOLATILE,\
    7.                KEY_WRITE,sattr,phkResult,NULL
    8.  
    9.         push eax
    10.         invoke RegOpenKeyEx,\
    11.                HKEY_LOCAL_MACHINE,'Software\$$*',NULL,KEY_WRITE,esp
    12.  
    13.         pop eax
    14.         invoke RegSetValueEx,eax,NULL,NULL,REG_SZ,'~',1
    15.         invoke RegCloseKey,phkResult
    16. exit:
    17.         invoke WinExec,"regedit.exe",SW_SHOWNORMAL
    18.         invoke ExitProcess,NULL
    19.  
    20. section '.data' readable writable
    21.         phkResult dd ?
    22.  
    23. struct  SECURITY_ATTRIBUTES
    24.         nLength               dd ?
    25.         lpSecurityDescriptor  dd ?
    26.         bInheritHandle        dd ?
    27. ends
    28.  
    29. sattr   SECURITY_ATTRIBUTES
    30.  
    31. .end start
    Как я понял RegCreateKeyEx() не достаточно чтобы RegSetValueEx(),
    поэтому дополнительно вызываем RegOpenKeyEx() здесь посередине.

    Если это не так, то я наверное в флагах запутался, например, вот такое
    REG_OPTION_NON_VOLATILE - вообще что-то заумное.

    Далее push eax я здесь на форуме у кого-то подсмотрел вместе с его хитрым esp.
    Однако, это хоть и ассемблерные штучки, но для msdn как-то эксцентрично выглядит,
    а нельзя ли без указания стека какими нибудь phkResult утрясти это? =)
    Просто чисто ради познания, хотя итак работает.

    Структуру SECURITY_ATTRIBUTES я не догоняю как работает, или надо к её полям обращаться?
    Что она есть что нет, без разницы. Или это позволяет зделать запись без прав админа?
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Semiono
    Басню Крылова "Мартышка и очки" в школе изучал ? - Про тебя :lol:
    Тебе же сказали - учи матчасть, фасм и мсдн. Что тут у тебя может работать, если в случае успеха RegCreate.. и RegOpen.. возвращают в eax ERROR_SUCCESS = 0, который ну никак не может быть валидным значением хэндла phkResult !
    В фасме передача параметра phkResult без скобок [..] означает передачу адреса переменной phkResult, чтобы ф-и RegCreate.. или RegOpen.. записали по этому адресу значение возвращаемого хэндла. А в функции RegSetValue и RegCloseKey нужно передавать не адрес, а само значение полученного хэндла - для этого нужно заключить параметр в квадратные скобки: [phkResult]
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Дык работает же!
    Вот смотри RegCreateKeyEx Function
    phkResult [out]
    A pointer... - это указатель! А дальше RegSetValueEx след теряется, и не ясно адрес или данные
    и куда вообще их передавать. Впрочем телепатия может помочь.
    Я про скобки давно уже знаю, и как правило наугад подставляю адрес/значение когда не знаю наверняка.
    Кстати, а где тогда надо addr указывать? Или вообще не нужно?
    И ещё я когда вычитал что надо байт указать, тоже был озадачен. Так чтоли addr byte [...] ?
    Или в фасме всегда скобок одних хватает [] ?
    А я что делаю? =)
    Мне просто опыта не хватает, а это в свою очередь от времени зависит, которого тоже не хватает.
    И то что я в тайне держу, я дебагер не открываю никогда, я там ничего не понимаю )))
    :dntknw:
     
  4. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Работает, но через одно место, т.к. никакие RegOpen и push\pop тут не нужны:
    Код (Text):
    1. invoke RegCreateKeyEx,..,phkResult,NULL ;передаем адрес phkResult
    2. invoke RegSetValueEx,[phkResult],... ;передаем значение phkResult
    3. invoke RegCloseKey,[phkResult] ;передаем значение phkResult
    Смотрим в книгу - видим фигу ? В мсдн черным по белому сказано
    1) для RegCreateKeyEx:
    2) для RegSetValueEx и RegCloseKey
    т.е. в первом случае адрес=указатель на переменную HKEY = dd, во втором случае значение=число, записанное в этой переменной

    addr или offset нужно указывать в масме, т.к. в нем, как и в высокоуровневых языках, указание имени hkResult без скобок означает взятие значения переменной, а для взятия адреса нужны доп. "магические приставки" addr (для строк и локальных переменных) или offset (для глобальных)
    В фасме же имя переменной без скобок означает ее адрес, а со скобками - значение

    Не байт, а указатель на байт BYTE*
    Эта хрень нужна для контроля типов в высокоуровневых языках, а фасм контролирует только размеры переменных и ему по барабану какой ты адрес передаешь - на байт или на дворд, т.к. и тот и другой имеют размер в 4 байта

    Может не опыта, а мозгов и усидчивости ?! Прежде чем что-то шкодить, нужно разобраться \ понять \ попробовать, а ты как мартышка начинаешь с ходу примерять очки на все непотребные места - "как правило наугад подставляю адрес/значение"
     
  5. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
  6. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
  7. VaZoNeZ

    VaZoNeZ New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    121
    Ну ёб жеж вашу мать. Вы можете или нет почитать на msdn, где надо использовать значение, а где указатель на него?
     
  8. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Ты за базаром следи, а то я тебе язы вырву.
     
  9. VaZoNeZ

    VaZoNeZ New Member

    Публикаций:
    0
    Регистрация:
    12 июл 2009
    Сообщения:
    121
    А чойта ты свое сообщение то потер, а? Языковырыватель хренов.

    Я именно так и знакомился с асмом - тыкал во все дырки, пока не начинало работать. Сиди себе и тыкай, авось заработает. Нет, надо лезть на WASM и задавать откровенно идиотские вопросы, которые не намекают ни на что, кроме идиотизма автора.

    Да и имхо, большинство вопросов Semiono - это абсолютно глупые вопросы, ответы на которые элементарно гуглятся, или на крайняк подсматриваются в примерах того-же MASM32.
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв