Приветствую. Господа объясните бестолковому почему я на выходе имею файл 1024, а не 512 и как я могу уменьшить размер. При загрузке в Ольгу вижу что секция забита нулями. на входе имею код Code (Text): format PE GUI 4.0 include 'win32a.inc' invoke URLDownloadToFile,NULL,_url,_file,NULL,NULL invoke ShellExecute,0,0,_file,0,0,SW_SHOW invoke ExitProcess,0 exit: _url db 'http://www.site.ru/ant.jpg',0 _file db 'c:\ant.jpg',0 data import library kernel32,'kernel32.dll',\ urlmon,'urlmon.dll',\ shell32,'shell32.dll' import kernel32,\ ExitProcess,'ExitProcess' import urlmon,\ URLDownloadToFile,'URLDownloadToFileA' import shell32,\ ShellExecute,'ShellExecuteA' end data
Да видимо в первую секцию код не поместился ... секция кода начинается с 200h. Может есть какие-то дериктивы по уменьшению размера бинарика на выходе ...
"...признаю свою вину, меру, степень, глубину ..." м.б. посоветуете другой тип файла на выходе ... или руками что поправить ?
2 n0name описание ничего, вот тока как заточить под fasm не догоняю. 2 murder по прежнему первая секция выравнивается до 1024.
))) так просто не прокатило, спалился на Code (Text): %define round(n, r) (((n+(r-1))/r)*r) а потом на вызове round ошибки валятся flat assembler version 1.67.26
покопай в разделе beginners там четотакое было или вот например Code (Text): ? equ 0x55 ?? equ 0x5555 ???? equ 0x55555555 FILE_ALIGN = 0x200 VIRTUAL_ALIGN = 0x1000 IMAGE_SIZE = 0x3000 HEAREDS_SIZE = 0x200 SECTIONS = 2 SEC_1_VIRT_SIZE = 0x100 SEC_1_RVA = 0x1000 SEC_1_RAW_SIZE = 0x200 SEC_1_RAW_OFS = 0x200 SEC_2_VIRT_SIZE = 0x100 SEC_2_RVA = 0x2000 SEC_2_RAW_SIZE = 0x200 SEC_2_RAW_OFS = 0x400 ENTRYPOINT equ EntryPoint ;<<<<<<<<<<<<<<<<<< ;========== MZ header =============== dd "MZ" db 0x3c-$ dup 0 dd 0x40 ;========== PE header =============== dd "PE" dw 14ch dw SECTIONS db 12 dup (?) ;0,0,0,0,0,0,0,0,0,0,0,0 dw 0xE0,103h,10bh db 14 dup (?) ;0,0,0,0,0,0,0,0,0,0,0,0,0,0 dd ENTRYPOINT db 8 dup (?) ;0,0,0,0,0,0,0,0 dd 400000h,VIRTUAL_ALIGN,FILE_ALIGN db 8 dup (?) ;0,0,0,0,0,0,0,0 dw 4 ;MajorSubsystemVersion db 6 dup (?) ;0,0,0,0,0,0 dd IMAGE_SIZE,HEAREDS_SIZE dw 0,0 dw 2 ;(Win32 GUI) db ?,? dd 0 dd 0 dd 0 dd 0 dd 0 dd 2 ;NumberOfRvaAndSizes ;======== Data Directory ============== db 8 dup (?) dd idata,20*1 db 36 dup (?) dd 0 ;debug directory size db 72 dup (?) ;========= Section Table =============== dq "section1" dd SEC_1_VIRT_SIZE,SEC_1_RVA,SEC_1_RAW_SIZE,SEC_1_RAW_OFS dd 0,0,0,0xE0000040 dq "section2" dd SEC_2_VIRT_SIZE,SEC_2_RVA,SEC_2_RAW_SIZE,SEC_2_RAW_OFS dd 0,0,0,0xE0000040 ;========= End of Header =============== db 0x200-$ dup 0 ; FILE ALIGN org 0x1000 ;======== Section 1 Begin ======================= EntryPoint: use32 push 0 call @f ;"PE",0 db "capt",0 @@: call @f db "msg",0 @@: push 0 call @f vUSER32 dd aMessageBoxA,0 @@: pop eax call dword[eax] ret ;============= section 1 end ======================= db 0x200-($-$$) dup 0 org 0x2000 ;============= section 2 begin ======================= ;import idata dd 0,0,0,aUSER32,vUSER32, 4 dup ????,0 aUSER32 db "USER32.DLL",0 aMessageBoxA db 0,0,"MessageBoxA",0 ;============= section 2 end ======================= db 0x400-($-$$) dup 0 ; FILE ALIGN
2 GoldFinch твой пример у меня fasm`ом скомпилировался на 2048 решение в 152 байта нашел тут http://www.wasm.ru/forum/viewtopic.php?pid=51713#p51713 вот тока теперь разобраться было бы неплохо )))
miae так ты его переделай как надо у будет хоть 97байт это какбэ скелет проги у которой оставлены только нужные поля
2 GoldFinch до этого уже допер ... я просто раньше не задумывался о размерах скомпилированных прог, потому как писал тока оболочки к БД.