Пример 1:
--------------------------------------------------------------------------------
Код:
include '%fasm%\win32ax.inc'
Простые примеры на fasm-e
Ссылка на источник приводится ниже.
section '.code' executable
start:
invoke GetSystemMetrics,SM_CXSCREEN
invoke wsprintf,@x,'0,24,%d,',eax
invoke GetSystemMetrics,SM_CYSCREEN
sub eax,52
invoke wsprintf,@y,'%d,0',eax
invoke lstrcat,@x,@y
invoke ExpandEnvironmentStrings,@i,@o,MAX_PATH
invoke WritePrivateProfileString,'OllyDbg','Placement',@x,@o
exit:
invoke ExitProcess,NULL
section '.data' readable writable
@x rb 2048
@y rb 1024-52
@i db '%ProgramFiles%\OllyDbg\OllyDbg.ini'
@o db 1,0
.end start
Сначала ловим размеры экрана CXSCREEN/CYSCREEN, затем немного уменьшаем высоту экрана, на размер бара.
Вместе с зазором снизу получается SM_CYSCREEN - 52, для красоты )
Затем всё это пишем в OllyDbg.ini файл.
Ну и теперь ещё можно и выполнить OllyDbg.exe через WinExec()
section '.code' executable - так не правильно, но можно
section '.code' code executable - а так правильно.
Секции в которых не определён тип, кампилятор по-умолчанию будет считать данными.
Однако, более важно указать readable writable там, где это нужно!
RunDll32.DLL
Пример 2
--------------------------------------------------------------------------------
Код:
; RunDLLCpl.exe
include '%fasm%\win32ax.inc'
section '.code' executable
start:
invoke ExpandEnvironmentStrings,@i,@o,MAX_PATH
invoke ShellExecute,NULL,NULL,@o,NULL,NULL,SW_HIDE
mov ebx,5
iwait:
invoke FindWindow,@c,@t
test eax,eax
jnz isend
dec ebx
jz exit
invoke Sleep,500
jmp iwait
isend:
push eax
invoke ShowWindow,eax,SW_MINIMIZE
pop eax
invoke SendMessage,eax,WM_COMMAND,(0 shl 16) or IDOK,0
exit:
retn
.end start
section '.data' readable writable
@c db '#32770',0
@t db 'Display Properties',0
@i db '%SystemRoot%\Resources\Themes\Luna.theme'
@o db 1,0
----------------------------------------------------------------------------------
Ещё примерчик на тему LoadLibraryA, динамическая подгрузка библиотек.
Код:
include '%fasm%\win32ax.inc'
section '.code' readable writable
start:
invoke LoadLibraryA,@x
mov ebx,eax
invoke GetProcAddress,ebx,MsgBox
mov [@@x],eax
invoke @@x,NULL,'Hello!','..::..',MB_OK
exit:
invoke LoadLibraryA,@y
mov ebx,eax
invoke GetProcAddress,ebx,ExitPr
mov [@@y],eax
invoke @@y,NULL
.end start
@x db 'USER32.DLL',0
MsgBox db 'MessageBoxA',0
@y db 'KERNEL32.DLL',0
ExitPr db 'ExitProcess',0
@@x dd ?
@@y dd ?
section '.rsrc' resource readable
directory RT_MANIFEST,_manifest
resource _manifest,1,LANG_NEUTRAL,manifest
resdata manifest
;file '%fasm%\manifest32.xml'
db '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> </assembly>'
endres
----------------------------------------------------------------------------------
Нашёл на просторах патч на masm32, попутно было на C++ и Pascal.
Весьма нужная штука, я часто такое хотел в хозяйстве иметь.
Вообщем переписал в fasm исходник, заодно быстро нашёл различия.
Все переменные вида ADDR lpFile пишем без слова ADDR, все другие
не начинающиеся с ADDR пишем в скобках, напр. [hWnd]
Все HANDLE меняем на тип dd, все DWORD на dw.
Заголовки, директивы и оформление секций удаляем и берём из примеров fasm.
Можно вообще не понимать что делаешь
Код:
include '%fasm%\win32ax.inc'
section '.code' executable
start:
invoke MessageBox,[hWnd],AppName,a9,MB_OK
invoke CreateFile,lpFile,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL
mov [hFile],eax
invoke SetFilePointer,[hFile],0x2,NULL,NULL ; offset to 2
invoke WriteFile,[hFile],a9,1,SizeWrite,NULL ; write byte [a9] to offset 1
invoke SetFilePointer,[hFile],0x4,NULL,NULL ; offset to 4
invoke WriteFile,[hFile],ae,1,SizeWrite,NULL ; write byte [ae] to offset 3
invoke CloseHandle,[hFile]
invoke MessageBox,[hWnd],isOK,lpFile,MB_OK
exit:
invoke ExitProcess,NULL
section '.data' readable
AppName db 'File patch',NULL
isOK db 'Done!',0
lpFile db 'C:\zzzz.dat',NULL
a9 db 0xa9 ; ©
ae db 0xae ; ®
db 'ack'
db 0x99
section '.data' readable writable
hFile dd ?
hWnd dd ?
SizeWrite dw ?
.end start
section '.rsrc' resource readable
directory RT_ICON,icons,RT_GROUP_ICON,group_icons,RT_VERSION,versions,RT_MANIFEST,_manifest
resource icons,\
1,LANG_NEUTRAL,icon_data1,\
2,LANG_NEUTRAL,icon_data2,\
3,LANG_NEUTRAL,icon_data3,\
4,LANG_NEUTRAL,icon_data4
resource group_icons,1,LANG_NEUTRAL,main_icon
resource versions,1,LANG_NEUTRAL,version
resource _manifest,1,LANG_NEUTRAL,manifest
icon main_icon,\
icon_data1,'%fasm%\exec1.ico',\
icon_data2,'%fasm%\exec2.ico',\
icon_data3,'%fasm%\exec3.ico',\
icon_data4,'%fasm%\exec4.ico'
resdata manifest
;file '%fasm%\manifest32.xml'
db '<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="X86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> </assembly>'
endres
versioninfo version,VOS__WINDOWS32,VFT_APP,VFT2_UNKNOWN,LANG_ENGLISH+SUBLANG_DEFAULT,0,\
'FileDescription','Patch.exe',\
'LegalCopyright','',\
'FileVersion','1.0.0.0',\
'ProductVersion','1.0.0.0',\
'OriginalFilename','Patch.exe',\
'Company',''
--------------------------------------------------------------------------------------
Реальное применение макроса!
Код:
include '%fasm%\win32ax.inc'
section '.code' executable
start:
invoke RegCreateKeyEx,HKCU,'Software\ZjSoft\WinAVIMP4',NULL,NULL,REGN,KEY_WRITE,NULL,phkResult,NULL
macro rc r1,r2,r3,r4 {invoke RegSetValueEx,[phkResult],r1,NULL,r2,r3,r4}
rc 'Code',REG_SZ,'59F0D04B31ADF0026C08E6041FD477284DA2910FDC11CDEB',48
rc 'Current',REG_SZ,'Semiono',7
rc 'Name',REG_DWORD,@00000001,4
invoke RegCloseKey,[phkResult]
;...
section '.data' readable
@00000001 dd 0x00000001
section '.data' readable writable
phkResult dd ?
;...
HKCU = HKEY_CURRENT_USER
REGN = REG_OPTION_NON_VOLATILE
Строк не стало меньше, зато более читабельно.
----------------------------------------------------------------------------------------