ANTICHAT Forum
HOME FORUMS MEMBERS RECENT POSTS LOG IN  
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #591  
Старый 06.09.2009, 01:58
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
С нами: 10386906

Репутация: 599


По умолчанию

на си тоже можно 4кб писать, достаточно в опциях компилятора выбрать использование RTL в DLL ключиком /MD
 
Ответить с цитированием

  #592  
Старый 06.09.2009, 03:17
ИНЖЕНЕР_13
Новичок
Регистрация: 04.09.2009
Сообщений: 6
С нами: 8781090

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

А МОЖНО ПДРОБНЕЕ Что это будет и как
 
Ответить с цитированием

  #593  
Старый 06.09.2009, 10:16
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Вообще можно на Си писать сверхмаленькие приложения. порой даже меньше асма. Там оптимизатор офегительный. Но для этого нужно отказаться от всех либ. Тока на WinAPI писать. Также компилить с оптимизацие, без отладочной инфы, и мерджить секции. Также и на фамсе правильно секции нужно располагать.
ВОт пример - находит адрес hosts и дописывает туда запись. Размер килобайт. Хотя внутри можно еще дописать пару команд потому как много свободного места есть
Код:
format PE GUI 4.0
entry Start

include 'include\win32ax.inc'
include 'include\encoding\win1251.inc'

section '.code' code readable executable import writeable
library kernel32,'KERNEL32.DLL'
include 'include\apia\kernel32.inc'

Start:
 invoke GetSystemDirectory, buf, 256
 invoke lstrcat, buf, filename
 invoke CreateFile, buf, GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0
 cmp eax, 0FFFFFFFFh
 je Exit
 mov [hFile], eax
 invoke SetFilePointer, eax, 0, 0, FILE_END
 invoke WriteFile, [hFile], hostip, hostip_stop - hostip, ReadBytes, 0
 invoke CloseHandle, [hFile]
 Exit:
 invoke ExitProcess, 0

 hostip db 13,10,"192.168.2.1 myLan",13,10
 hostip_stop:
 filename db "\drivers\etc\hosts"

 hFile dd ?
 ReadBytes dd ?
 buf db 256 dup (?)
 
Ответить с цитированием

  #594  
Старый 06.09.2009, 11:28
ИНЖЕНЕР_13
Новичок
Регистрация: 04.09.2009
Сообщений: 6
С нами: 8781090

Репутация: 0
Question

Цитата:
Сообщение от slesh  
Вообще можно на Си писать сверхмаленькие приложения. порой даже меньше асма. Там оптимизатор .......
в чем компилить это? си++?
 
Ответить с цитированием

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

Репутация: 3349


По умолчанию

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

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

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

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

  #597  
Старый 06.09.2009, 13:23
Hiro Protagonist
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
С нами: 8795069

Репутация: 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 
 
Ответить с цитированием

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

Репутация: 3349


По умолчанию

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

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

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

  #599  
Старый 06.09.2009, 17:46
ИНЖЕНЕР_13
Новичок
Регистрация: 04.09.2009
Сообщений: 6
С нами: 8781090

Репутация: 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); , как подправить?_)
 
Ответить с цитированием

  #600  
Старый 06.09.2009, 22:09
Hiro Protagonist
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
С нами: 8795069

Репутация: 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)
 
Ответить с цитированием
Ответ



Предыдущая тема Следующая тема
Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы для новичков! (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



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.