flat assembler
Message board for the users of flat assembler.
![]() |
Author |
|
revolution 09 Jul 2009, 10:47
Without seeing the source code it is difficult to say what is wrong.
|
|||
![]() |
|
hdj1958 09 Jul 2009, 12:09
hi revolution,
its not in the source code, because i have made some more programs with the same functions under 65.536 byte and they are start ALL and run well, but each program which has 65.536 bytes or more wont start, i am sure that i have to advise to FASM to write a missing option, BUT WHICH ONE ? these are my first lines: format PE GUI 4.0 entry Start which are yours? |
|||
![]() |
|
revolution 09 Jul 2009, 12:26
What are your section options? Are you using the standard 'win32{a|w}.inc' type of includes?
|
|||
![]() |
|
hdj1958 09 Jul 2009, 16:58
the third line is: include 'c:/fasm/include/Win32axp.inc'
and all code section have: section '.code' code readable executable or data section '.data' code readable (writeable) |
|||
![]() |
|
revolution 10 Jul 2009, 00:26
Since you are using the standard include 'win32axp' then you don't need the 'format ...' or 'entry ...' lines. But make sure you have the '.end Start' line.
|
|||
![]() |
|
hdj1958 10 Jul 2009, 11:09
if i add at the end ".end Start" FASM says:
"setting already specified" because in Win32axp, line 174 and below (its a marco), will produce again: 176: entry label 178: section '.idata' import data readable writeable 179: ... if i delete the third line "entry Start" then FASM says: "section '.idata' import data readable writeable" data already defined my ".idata" section (one of the last programer lines/code) is: section '.idata' import data readable writeable ;************************************************************************* library wininet,'wininet.dll',\ urlmon,'urlmon.dll' import wininet,\ HttpOpenRequest,'HttpOpenRequestA',\ HttpQueryInfo,'HttpQueryInfoA',\ HttpSendRequest,'HttpSendRequestA',\ InternetOpen,'InternetOpenA',\ InternetOpenUrl,'InternetOpenUrlA',\ InternetReadFile,'InternetReadFile',\ InternetCloseHandle,'InternetCloseHandle',\ InternetCanonicalizeUrl,'InternetCanonicalizeUrlA',\ InternetQueryDataAvailable,'InternetQueryDataAvailable',\ InternetConnect,'InternetConnectA' import urlmon,\ URLDownloadToFile,'URLDownloadToFileA' NOTHING MORE the macro ".end label" does not include/import the 2 libraries (above), so that i mean, that the error ("data already defined") refer to the section name ".idata", and if its true that i can not use twice a section ".idata" than i can not use the macro ".end Start" because i need some additional libraries (see above) so finaly i have deleted ".end Start", written again "entry Start" at the begining , added in section ".idata" the 8 libraries from line 180-187 (Win32axp.inc), and then suddenly FASM does not know what is (for example) GetMessage, thats very strange, because in line 159-166 there are the EXPLICIT order to include the 8 api files, these 8 files are OUTSIDE ANY marco definition, so FASM has include them every time (without ANY conditions), but FASM wont do it, with the consequence that i have added the 8 api includes in the section ".idata" and now FASM knows what means "GetMessage", is it correct/logic that somebody has to include TWICE the same 8 api files??? MAYBE i have some logical error in my mind - smile, but in no way i see where it is, or maybe FASM has a bug? |
|||
![]() |
|
revolution 10 Jul 2009, 12:28
Post your code please. We are just going around in circles. I think you have made a mistake with mixing the 'win32axp' macros and your own custom sections. But I can't say for sure because I have no code to see.
|
|||
![]() |
|
hdj1958 10 Jul 2009, 13:02
which part of my program do you want to see?
the whole programm has more than 50 includes, because each include is a sub-routine like proc ... endp i dont think that is a good idea to put here more than 50 source file - smile, but this is the main part: Code: format PE GUI 4.0 entry start include 'c:/fasm/include/Win32axp.inc' ;************************************************************************* section '.code' code readable executable ;************************************************************************* start: call X000StartWindows cmp eax,-1 jne ReturnToWindow ; Window + Menus + div. anderer sachen bevor LOOP GETMESSAGE ;------------------------------------------------------------------------- .ab100: call newsreaderinit or eax,eax jz ReturnToWindow stdcall X011InternetOpen getmessageloop: invoke GetMessage ,sys_windowmessage ,NULL ,0 ,0 or eax,eax ;If the function retrieves the WM_QUIT message, the return value is zero. jz ReturnToWindow cmp eax,-1 ;If there is an error, the return value is -1 je ReturnToWindow invoke TranslateMessage,sys_windowmessage invoke DispatchMessage,sys_windowmessage jmp getmessageloop ReturnToWindow: ;------------------------------------------------------------------------- call newsreadercloseall mov eax,[sys_internetopen_handle] or eax,eax jz .back invoke InternetCloseHandle ,eax xor eax,eax mov [sys_internetopen_handle],eax .back: invoke ExitProcess ,0 ;************************************************************************* section '.data' data readable writeable ;************************************************************************* sys_windowmessage MSG sys_windowlistbox dd 0000 testmemo db 'src=' db '"http://www.espanyainfo.net/system/pic_default.jpg"',0 rb MAX_PATH testurl db 'http://www.espanyainfo.net/system/pic_default.jpg',0 rb MAX_PATH testdir db 'f:/readercache/feeds/zzztest/',0 ;************************************************************************* section '.code' code readable executable ;************************************************************************* proc MainWindowProc, msg_hwnd, msg_wmsg, msg_wparam, msg_lparam ;------------------------------------------------------------------------- mov eax,[msg_wmsg] cmp eax,WM_CLOSE je .wmclose cmp eax,WM_DESTROY je .wmdestroy ; hier werden die WM_... Commands vom jeweiligen programm ausgefuehrt ; dieses HAUPT-modul weiss ja nicht welche COMMANDS von sub-prog benoetigt werden ; wird noch modifiziert, besser ist include xxxx.asm mov eax,[msg_hwnd] mov [sysmsg_hwnd],eax mov eax,[msg_wmsg] mov [sysmsg_wmsg],eax mov eax,[msg_wparam] mov [sysmsg_wparam],eax mov eax,[msg_lparam] mov [sysmsg_lparam],eax call newsreaderwmcommands or eax,eax jnz .back ;WM_COMMAND wurde verarbeitet .defwindowproc: invoke DefWindowProc,[msg_hwnd],[msg_wmsg],[msg_wparam],[msg_lparam] .back: ret ; An application can prompt the user for confirmation, prior to destroying a window, by processing the WM_CLOSE message ; and calling the DestroyWindow function only if the user confirms the choice. ;da ich im moment nicht drauf regiere, springe ich direkt zu .destroy .wmclose: nop .wmdestroy: ;------------------------------------------------------------------------- invoke PostQuitMessage,0 xor eax,eax ret endp ;************************************************************************* section '.data' data readable writeable ;************************************************************************* sysmsg_hwnd dd 0000 sysmsg_wmsg dd 0000 sysmsg_wparam dd 0000 sysmsg_lparam dd 0000 sys_internetopen_handle dd 0000 sys_internet_header_status dd 0000,00 ;z.b. 200 oder 302 oder 400 oder... sys_internet_header_contenttype dd 0000,00 ;z.b. img_ / txt_ / .... sys_internet_header_contentsubtype dd 0000,00 ;z.b. jpg_ / gif_ / bmp_ / .... sys_internet_header_contentlength dd 0000 ; byte groesse von file xxx include 'includes/X000StartWindows.asm' include 'xnewsreader/newsreader_call.asm' |
|||
![]() |
|
revolution 10 Jul 2009, 13:25
Hmm, how about this:
Also: This forum supports "code" tags. like this [code]My fasm code[/code], it would be nice to see your code above surrounded by these tags ![]() |
|||
![]() |
|
Tomasz Grysztar 10 Jul 2009, 13:28
There is one substantial error in this code: multiple code and data sections should be avoided, because fasm itself does not do any "linking" tasks, and therefore the final executable will contain separate section for each "section" definition in code (if you'd like to have section mergin, consider switching to MS COFF format and some linker).
As for the error, it's quite possible that there is some empty section created because of this (for example if you have "section" declaration with "proc" declarations withing, which are not used in the program, and therefore not included, because "proc" macro does such check) - and PE loader in Windows doesn't like empty sections. |
|||
![]() |
|
hdj1958 10 Jul 2009, 15:02
its a little bit strange, that all exe size less than 65.536 are running well, independently which sub-rountine i have included or not,
then i have mixed / tested each include function and ALL exe file has started !!! ONLY if the exe file has reached 65.536 byte or more then i could not start the program with double click, all my includes i have only in one folder and with the search function with my totalcommander i have searched for "import", TC has show me ONLY ONE file and ONLY ONE part which contains the word "import", so that i have twice the import section is EXCLUDED, now i have started the prog "Anywhere PE Viewer" from ucware, it tells me, that i have 99 headers ![]() E:\fasm\newsreader.exe File Headers DOS EXE:true NT EXE:true Dos STUB size:64 bytes DOS Header e_magic:5a4dh (23.117) e_cblp:80h (128) e_cp:1h (1) e_crlc:0h (0) e_cparhdr:4h (4) e_minalloc:10h (16) e_maxalloc:ffffh (65.535) e_ss:0h (0) e_sp:140h (320) e_csum:0h (0) e_ip:0h (0) e_cs:0h (0) e_lfarlc:40h (64) e_ovno:0h (0) e_res:0h (0) e_oemid:0h (0) e_oeminfo:0h (0) e_res2:0h (0) e_lfanew:80h (128) COFF File Header (Object & Image) Machine:Intel 386 or later, and compatible processors NumberOfSections:63h (99) TimeDateStamp:Fri Jul 10 13:55:38 BST 2009 PointerToSymbolTable:0h (0) NumberOfSymbols:0h (0) SizeOfOptionalHeader:e0h (224) Characteristics:IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LINE_NUMS_STRIPPED, IMAGE_FILE_LOCAL_SYMS_STRIPPED, IMAGE_FILE_32BIT_MACHINE Optional Header (Usually Image Only) PE Format:PE32 Standard fields MajorLinkerVersion:1h (1) MinorLinkerVersion:44h (6 ![]() SizeOfCode:7200h (29.184) SizeOfInitializedData:7c00h (31.744) SizeOfUninitializedData:0h (0) AddressOfEntryPoint:2000h (8.192) BaseOfCode:2000h (8.192) BaseOfData:3000h (12.288) NT additional fields ImageBase:400000h (4.194.304) SectionAlignment:1000h (4.096) FileAlignment:200h (512) MajorOperatingSystemVersion:1h (1) MinorOperatingSystemVersion:0h (0) MajorImageVersion:0h (0) MinorImageVersion:0h (0) MajorSubsystemVersion:4h (4) MinorSubsystemVersion:0h (0) SizeOfImage:66000h (417.792) SizeOfHeaders:1200h (4.608) CheckSum:1bcfbh (113.915) Subsystem:Image runs in the Windows™ graphical user interface (GUI) subsystem DllCharacteristics: SizeOfStackReserve:1000h (4.096) SizeOfStackCommit:1000h (4.096) SizeOfHeapReserve:10000h (65.536) SizeOfHeapCommit:0h (0) LoaderFlags:0h (0) NumberOfRvaAndSizes:10h (16) Optional Header Data Directories (Image Only) Export Table VirtualAddress:0h (0) Size:0h (0) Import Table VirtualAddress:56000h (352.256) Size:478h (1.144) Resource Table VirtualAddress:0h (0) Size:0h (0) Exception Table VirtualAddress:0h (0) Size:0h (0) Certificate Table VirtualAddress:0h (0) Size:0h (0) Base Relocation Table VirtualAddress:0h (0) Size:0h (0) Debug VirtualAddress:0h (0) Size:0h (0) Architecture VirtualAddress:0h (0) Size:0h (0) Global Ptr VirtualAddress:0h (0) Size:0h (0) TLS Table VirtualAddress:0h (0) Size:0h (0) Load Config Table VirtualAddress:0h (0) Size:0h (0) Bound Import VirtualAddress:0h (0) Size:0h (0) IAT VirtualAddress:0h (0) Size:0h (0) Delay Import Descriptor VirtualAddress:0h (0) Size:0h (0) COM+ Runtime Header VirtualAddress:0h (0) Size:0h (0) Reserved VirtualAddress:0h (0) Size:0h (0) Section Table (Section Headers)[99] each ".code" or ".data" has in the variable name "VirtualSize" a value greater than 3 bytes and the variable name "Characteristics" contains Section contains executable code and/or Section can be executed as code and/or Section can be read and/or Section contains initialized data and/or Section can be written to WITHOUT ANY EXCEPTION THERE IS NO EMPTY SECTION to avoid (evitar in spanish) en empty section i have written in each include file which contain a sub-routine on the TOP (first line) xor eax,eax ret proc ... endp so each include make at least a section of less 3 or 4 bytes, I KNOW thats not the fine art, but i am STILL TESTING the functions/program and i am sure in the near future i will modernize a lot of things !!! |
|||
![]() |
|
Tomasz Grysztar 10 Jul 2009, 15:05
Can you post the final executable file that is not working? Maybe we can trace it back this way.
|
|||
![]() |
|
hdj1958 10 Jul 2009, 15:20
hola tomasz,
here comes the exe file in .zip
|
|||||||||||
![]() |
|
Tomasz Grysztar 10 Jul 2009, 15:30
You definitely have too many sections there. According to Microsoft's PE/COFF specification, Windows loader limits the number of sections to 96.
|
|||
![]() |
|
hdj1958 10 Jul 2009, 15:38
OK and thanks for your help,
but maybe you could add next time a section counter into FASM that will returns an error if somebody will have more than 96 sections ![]() regards from spain |
|||
![]() |
|
Tomasz Grysztar 10 Jul 2009, 15:40
hdj1958 wrote: but maybe you could add next time a section counter into FASM that will returns an error if somebody will have more than 96 sections This is only the limitation of Windows loader, not the PE format. And PE format may be used not only in Windows. |
|||
![]() |
|
< Last Thread | Next Thread > |
Forum Rules:
|
Copyright © 1999-2025, Tomasz Grysztar. Also on GitHub, YouTube.
Website powered by rwasa.