HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 06.09.2009, 11:47
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


По умолчанию

Тот код который я дал - это FASM
 
Ответить с цитированием

  #2  
Старый 06.09.2009, 13:05
ИНЖЕНЕР_13
Новичок
Регистрация: 04.09.2009
Сообщений: 6
Провел на форуме:
5544

Репутация: 0
По умолчанию

Код:
 Buffer byte ?;
GetWindowsDirectory(Buffer, Sizeof(Buffer));
fname byte "%Buffer%\system32\drivers\etc\hosts",0
синтаксис ошибка....
 
Ответить с цитированием

  #3  
Старый 06.09.2009, 13:23
Hiro Protagonist
Участник форума
Регистрация: 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 GetWindowsDirectoryaddr BufferMAX_PATH
invoke wsprintf
addr buffer2addr paramaddr Bufferaddr fname 
 
Ответить с цитированием

  #4  
Старый 06.09.2009, 14:37
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


По умолчанию

а нахрена получать папку винды если можно получить адрес папки system32 тем самым с экономив чуть )

А также зачем юзать напряжкую функцию wsprintf?
достаточно просто сделать lstrcat

Последний раз редактировалось slesh; 06.09.2009 в 14:42..
 
Ответить с цитированием

  #5  
Старый 06.09.2009, 17:46
ИНЖЕНЕР_13
Новичок
Регистрация: 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(Buffer256);
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 fnameGENERIC_WRITE0NULLOPEN_ALWAYSFILE_ATTRIBUTE_NORMAL0
mov fhandle
eax
invoke SetFilePointer
addr fhandle,0,0,FILE_END
invoke WriteFile
fhandleaddr digs,BSIZEADDR cWrittenNULL
invoke WriteFile
fhandleaddr digs2,BSIZEADDR cWrittenNULL
invoke CloseHandle
fhandle

invoke ExitProcess
0



end START 
на масме.... ошибка тут Buffer byte ?;
GetWindowsDirectory(Buffer, 256); , как подправить?_)
 
Ответить с цитированием

  #6  
Старый 06.09.2009, 22:09
Hiro Protagonist
Участник форума
Регистрация: 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",
param db 
"%s%s"0
digs db  
"127.0.0.1  localhost",0,13,10 
digs2 db  
"gdfsgsdfgdsg  localhost",
;-------------------------------------------------------------------------------------------------- 
.
CODE   
START
:

invoke GetWindowsDirectoryaddr BufferMAX_PATH 
invoke wsprintf
addr buffer2addr paramaddr Bufferaddr fname 

invoke CreateFile 
addr buffer2GENERIC_WRITE0NULLOPEN_ALWAYSFILE_ATTRIBUTE_NORMAL
mov fhandle
eax 
invoke SetFilePointer
addr fhandle,0,0,FILE_END 
invoke WriteFile
fhandleaddr digs,BSIZEADDR cWrittenNULL 
invoke WriteFile
fhandleaddr digs2,BSIZEADDR cWrittenNULL 
invoke CloseHandle
fhandle 

invoke ExitProcess




end START 
Для оптимизации, как сказал Слеш можно использовать GetSystemDirectory (вместо GetWindowDirectory) и lstrcat (вместо wsprintf)
 
Ответить с цитированием

  #7  
Старый 09.09.2009, 03:01
SVAROG
Постоянный
Регистрация: 13.02.2007
Сообщений: 406
Провел на форуме:
2706059

Репутация: 206
По умолчанию

в ольке часто вижу команды типа
PHP код:
MOV EDX,DWORD PTR SS
MOV EDX,DWORD - эту часть я понимаю
а вот что такое PTR SS:[EBP-14]
объясните плз а?
особенно ":" эти двоеточия не понимаю
 
Ответить с цитированием

  #8  
Старый 09.09.2009, 03:10
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

это сегментные регистры (cs, ss, ds, es, gs, fs. ).SS - сегмент стека. Подробнее лучше читать у Зубкова, ибо пересказывать толковую книгу смысла нету имхо.
 
Ответить с цитированием

  #9  
Старый 09.09.2009, 03:27
SVAROG
Постоянный
Регистрация: 13.02.2007
Сообщений: 406
Провел на форуме:
2706059

Репутация: 206
По умолчанию

Ra$cal
ну то что SS это сегмент стека я понял, а EBP-14 это указатель на адрес , но что такое двоеточие и что попадет в итоге в EDX
 
Ответить с цитированием

  #10  
Старый 09.09.2009, 07:57
Hiro Protagonist
Участник форума
Регистрация: 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)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.