ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

06.09.2009, 11:47
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Тот код который я дал - это FASM
|
|
|

06.09.2009, 13:05
|
|
Новичок
Регистрация: 04.09.2009
Сообщений: 6
Провел на форуме: 5544
Репутация:
0
|
|
Код:
Buffer byte ?;
GetWindowsDirectory(Buffer, Sizeof(Buffer));
fname byte "%Buffer%\system32\drivers\etc\hosts",0
синтаксис ошибка....
|
|
|

06.09.2009, 13:23
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
PHP код:
...
.data?
Buffer db MAX_PATH dup(?)
buffer2 db MAX_PATH dup(?)
...
.data
fname db "\system32\drivers\etc\hosts",0
param db "%s%s", 0
...
.code
...
invoke GetWindowsDirectory, addr Buffer, MAX_PATH
invoke wsprintf, addr buffer2, addr param, addr Buffer, addr fname
|
|
|

06.09.2009, 14:37
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
а нахрена получать папку винды если можно получить адрес папки system32 тем самым с экономив чуть )
А также зачем юзать напряжкую функцию wsprintf?
достаточно просто сделать lstrcat
Последний раз редактировалось slesh; 06.09.2009 в 14:42..
|
|
|

06.09.2009, 17:46
|
|
Новичок
Регистрация: 04.09.2009
Сообщений: 6
Провел на форуме: 5544
Репутация:
0
|
|
если честно чуть не понял, мне нужно просто директорию в переменную получить
PHP код:
.386
.model flat,stdcall
option casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
;###########################################################
NOFDIG equ 30
DSIZE equ 30
BSIZE equ NOFDIG*DSIZE
;###########################################################
;----------------------------------------------------------------------------------------------
.data
Buffer byte ?;
GetWindowsDirectory(Buffer, 256);
fname byte "%Buffer%\system32\drivers\etc\hosts",0
fhandle dword ?
cWritten dword ?
digs byte "127.0.0.1 localhost",0,13,10
digs2 byte "gdfsgsdfgdsg localhost",0
;--------------------------------------------------------------------------------------------------
.CODE
START:
invoke CreateFile , addr fname, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
mov fhandle, eax
invoke SetFilePointer, addr fhandle,0,0,FILE_END
invoke WriteFile, fhandle, addr digs,BSIZE, ADDR cWritten, NULL
invoke WriteFile, fhandle, addr digs2,BSIZE, ADDR cWritten, NULL
invoke CloseHandle, fhandle
invoke ExitProcess, 0
end START
на масме.... ошибка тут Buffer byte ?;
GetWindowsDirectory(Buffer, 256); , как подправить?_)
|
|
|

06.09.2009, 22:09
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
омфг!
ясно же было написано что и куда вставлять.
Кароче вот подправленный исходник:
PHP код:
.386
.model flat,stdcall
option casemap:none
include C:\masm32\INCLUDE\WINDOWS.INC
include C:\masm32\INCLUDE\KERNEL32.INC
include C:\masm32\INCLUDE\USER32.INC
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
;################################################# ##########
NOFDIG equ 30
DSIZE equ 30
BSIZE equ NOFDIG*DSIZE
;################################################# ##########
;----------------------------------------------------------------------------------------------
.data?
Buffer db MAX_PATH dup(?)
buffer2 db MAX_PATH dup(?)
fhandle dd ?
cWritten dd ?
.data
fname db "\system32\drivers\etc\hosts",0
param db "%s%s", 0
digs db "127.0.0.1 localhost",0,13,10
digs2 db "gdfsgsdfgdsg localhost",0
;--------------------------------------------------------------------------------------------------
.CODE
START:
invoke GetWindowsDirectory, addr Buffer, MAX_PATH
invoke wsprintf, addr buffer2, addr param, addr Buffer, addr fname
invoke CreateFile , addr buffer2, GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0
mov fhandle, eax
invoke SetFilePointer, addr fhandle,0,0,FILE_END
invoke WriteFile, fhandle, addr digs,BSIZE, ADDR cWritten, NULL
invoke WriteFile, fhandle, addr digs2,BSIZE, ADDR cWritten, NULL
invoke CloseHandle, fhandle
invoke ExitProcess, 0
end START
Для оптимизации, как сказал Слеш можно использовать GetSystemDirectory (вместо GetWindowDirectory) и lstrcat (вместо wsprintf)
|
|
|

09.09.2009, 03:01
|
|
Постоянный
Регистрация: 13.02.2007
Сообщений: 406
Провел на форуме: 2706059
Репутация:
206
|
|
в ольке часто вижу команды типа
MOV EDX,DWORD - эту часть я понимаю
а вот что такое PTR SS:[EBP-14]
объясните плз а?
особенно ":" эти двоеточия не понимаю 
|
|
|

09.09.2009, 03:10
|
|
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме: 1354067
Репутация:
599
|
|
это сегментные регистры (cs, ss, ds, es, gs, fs. ).SS - сегмент стека. Подробнее лучше читать у Зубкова, ибо пересказывать толковую книгу смысла нету имхо.
|
|
|

09.09.2009, 03:27
|
|
Постоянный
Регистрация: 13.02.2007
Сообщений: 406
Провел на форуме: 2706059
Репутация:
206
|
|
Ra$cal
ну то что SS это сегмент стека я понял, а EBP-14 это указатель на адрес , но что такое двоеточие и что попадет в итоге в EDX
|
|
|

09.09.2009, 07:57
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
двоеточие - это "команда" переопределения сегмента. Те таким образом указывается относительно какого сегмента отсчитывается смещение после двоеточия. В защищенном режиме в сегментных регистрах хранятся селекторы, определяющие сегмент, но это тебе уже не важно. В принципе не обращай внимание на эти двоеточия, тк в винде у нас модель памяти flat и играть роль сегменты в твоем случае не будут.
dword ptr - это указывает на то, что в правом операнде у нас указатель на двойное слово. В принципе его можно не указывать явно, тк размерность второго операнда определяет первый, а он как раз - dword.
MOV EDX,DWORD PTR SS:[EBP-14]
Таким образом эта команда будет означать - переместить двойное слово в регистр edx из ячейки памяти по смещению ebp-14 относительно сегмента, селектор которого находится в регистре SS.
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Вопросы для новичков! (faq)
|
PEPSICOLA |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
92 |
14.05.2010 17:59 |
|
ОС с нуля
|
z01b |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
36 |
03.07.2008 15:30 |
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
|
|
|
|