А кто тебе не дает подключить ресурс в исходник на стадии программирования? Или нет исхоника? ПОпробуй воспользоваться прогами типа Resource WorkShop который идет с Delphi или любой другой редактор ресурса. Или тебе нужно программно добавить иконку? Если программно то есть апишки для этого типа UpdateResource
В примерах масма же есть. Создаешь например test.rc с текстом Code: #include "\masm32\include\resource.h" 500 ICON MOVEABLE PURE LOADONCALL DISCARDABLE "icon.ico" Потом в консоле rc /v test.rc cvtres /machine:ix86 test.res и во время линковки link /SUBSYSTEM:WINDOWS obj_твоего_приложения.obj test.obj
Вот так компилирую. Code: ml /c /coff мой_код.asm Link /SUBSYSTEM:WINDOWS мой_код.obj pause Хотелось бы добавить файл *.ico , подскажите плиз.
Code: rc /v test.rc ML /nologo -c -coff имя_асм_файла.asm link /SUBSYSTEM:WINDOWS имя_асм_файла.obj test.res /FILEALIGN:512 /VERSION:4.0 /ignore:4078 /RELEASE /BASE:0x400000 Файл ресурсов test.rc - в сообщении Kaimi двумя постами выше.
люди вчера увидел компилятор асм фасм (взял этот потому что не соображаю пока в асме ) но времени пока что увы времени учить нету, нужен код ,а вернее полностью прога.. под хп... 32. нужно дописать в файл текст и все. больше не чего, без окон без нечего, не паливно. надеюсь на помошь. буду благодарен вечным респектом и уважухой.
CreateFile на запись SetFilePointer на конец файла WriteFile запишеш CloseFile закрыть Чувствую что ты хочеш записать строку в etc\hosts или я ошибаюсь?
прогер пргера чувствует из далека, мысли читаете батюфка) именна, на делфе вышло 200 кб, на си 150 на паскале 150 на асме написал 4 кб..то что нужно) уже написал)
на си тоже можно 4кб писать, достаточно в опциях компилятора выбрать использование RTL в DLL ключиком /MD
Вообще можно на Си писать сверхмаленькие приложения. порой даже меньше асма. Там оптимизатор офегительный. Но для этого нужно отказаться от всех либ. Тока на WinAPI писать. Также компилить с оптимизацие, без отладочной инфы, и мерджить секции. Также и на фамсе правильно секции нужно располагать. ВОт пример - находит адрес hosts и дописывает туда запись. Размер килобайт. Хотя внутри можно еще дописать пару команд потому как много свободного места есть Code: 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 (?)
Code: Buffer byte ?; GetWindowsDirectory(Buffer, Sizeof(Buffer)); fname byte "%Buffer%\system32\drivers\etc\hosts",0 синтаксис ошибка....
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
а нахрена получать папку винды если можно получить адрес папки system32 тем самым с экономив чуть ) А также зачем юзать напряжкую функцию wsprintf? достаточно просто сделать lstrcat
если честно чуть не понял, мне нужно просто директорию в переменную получить 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); , как подправить?_)
омфг! ясно же было написано что и куда вставлять. Кароче вот подправленный исходник: 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)
в ольке часто вижу команды типа PHP: MOV EDX,DWORD PTR SS:[EBP-14] MOV EDX,DWORD - эту часть я понимаю а вот что такое PTR SS:[EBP-14] объясните плз а? особенно ":" эти двоеточия не понимаю
это сегментные регистры (cs, ss, ds, es, gs, fs. ).SS - сегмент стека. Подробнее лучше читать у Зубкова, ибо пересказывать толковую книгу смысла нету имхо.