|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 13, 2003 17:20:00 Подскажите почему значение прочитанное (?) из реестра не выводится. rDP dd ? rHandle dd ? rKey db 'Software\KeyName',0 rValName db 'ValName',0 rValRead db 32 dup(0) call RegCreateKeyExA,80000002h,offset rKey,0,0,0,0F003Fh,0,offset rHandle,offset rDP call RegQueryValueExA,[rHandle],offset rValName,0,1,offset rValRead,32d call MessageBoxA,0,offset rValRead,offset msgTitle,0 |
|
|
Дата: Авг 13, 2003 17:52:23 Misty Страный вопрос.. Но если оно прочитано... А что ты видишь под отладчиком? :) |
|
|
Дата: Авг 13, 2003 18:15:30 Ну ладно, поставим вопрос по другому: "Как прочитать значение из реестра?" Вроде бы всё правильно, KEY_ALL_ACCESS стоит, RegCreateKeyExA и RegSetValueExA работают. |
|
|
Дата: Авг 13, 2003 21:20:24.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\iinclude\user32.inc
include \masm32\iinclude\kernel32.inc
include \masm32\iinclude\advapi32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\advapi32.lib
.data
szRegSubKey db "Software\CoolApp", 0
szSomeKey db "Bla", 0
szData db "bla-bla-bla", 0
.code
start proc
local hKey:HANDLE
local acData[128]:CHAR
local cbData:DWORD
invoke RegCreateKeyEx, HKEY_CURRENT_USER, addr szRegSubKey, 0, NULL, \
0, KEY_ALL_ACCESS, NULL, addr hKey, NULL
.if eax == ERROR_SUCCESS
invoke RegSetValueEx, hKey, addr szSomeKey, 0, REG_SZ, addr szData, sizeof szData
.if eax == ERROR_SUCCESS
mov cbData, sizeof acData
invoke RegQueryValueEx, hKey, addr szSomeKey, 0, NULL, addr acData, addr cbData
.if eax == ERROR_SUCCESS
invoke MessageBox, NULL, addr acData, NULL, MB_OK
.endif
invoke RegDeleteKey, HKEY_CURRENT_USER, addr szRegSubKey
.endif
.endif
invoke ExitProcess, 0
start endp
end start |
|
|
Дата: Авг 14, 2003 06:40:21 Нескромный вопрос: такое писать на asm'e - это тот же сишный код получается |
|
|
Дата: Авг 14, 2003 09:48:05 Four-F Вроде бы всё так же, чего я там намудрила... ZverA Размером выйдет поменьше, раз в 50. И ещё это так MASM выглядит, порой кажется что это листинг на бэйсике, только с регистрами и сегментами. |
|
|
Дата: Авг 14, 2003 10:30:58 [ Misty: Размером выйдет поменьше, раз в 50. ] Если все правильно сделать, то размер будет таким же, а скорее всего даже чуть меньше. Такова суровая действительность. |
|
|
Дата: Авг 14, 2003 10:49:10 Four-F вот ты объявляешь local acData[128]:CHAR прямо в коде, а если я объявлю в дате вот так rValRead db 32 dup(0) это вроде бы один пень? |
|
|
Дата: Авг 14, 2003 10:56:08 Размером выйдет поменьше, раз в 50 А отладка в 50 раз дольше :) |
|
|
Дата: Авг 14, 2003 12:01:50 [ Misty: ...вот ты объявляешь local acData[128]:CHAR прямо в коде... ] Точнее в стеке. [ Misty: ...это вроде бы один пень? ] Не - не один, а целых три пня. И все разные :-) 1. Размер acData 128 байт, а rValRead 32 байта. 2. Содержимое acData будет инициализировано случайными значениями, а содержимое rValRead инициализировано нулями. 3. Память под массив acData выделяется на стеке, а под массив rValRead в секции инициализированных данных, т.е. без толку занимает 32 байта на диске. [ ZverA: А отладка в 50 раз дольше :) ] А это уже не хорошо, так как вскрывать недостатки программирования на нашем любимом языке есть злостный оффтоп ;-) |
|
|
Дата: Авг 14, 2003 12:11:23 Four-F rValRead db 128 dup(?), теперь один ;) Я имела в виду, что работать будет одинаково. Так? ZverA За всё нужно платить... |
|
|
Дата: Авг 14, 2003 13:32:43 · Поправил: Four-F [ Misty: Я имела в виду, что работать будет одинаково. Так? ] Да. А если уж совсем дотошно разобраться, то еще одно отличие есть. Если буфер в стеке, то код будет выглядеть примерно так: 00401059 8d8578ffffff lea eax,[ebp-0088] 0040105f 50 push eax . . . 00401073 ff1504204000 call [RegQueryValueExA] А если в секции данных (или где либо по глобальному смещению), то код будет выглядеть примерно так: 00401080 6824304000 push 00403024 . . . 00401096 ff1504204000 call [RegQueryValueExA] Во втором случае код занимает на 2 байта меньше. Правда если это будет длл, то дополнительная запись добавится в релоки и разница пропадет. |
|
|
Дата: Авг 14, 2003 14:15:49 Four-F Misty Эта разница как раз видна в примере "Self-Deleting Executables for Windows 95,98,ME" :-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055 |